Tôi đã tìm thấy một thực tế rất có hại về bản đồ stl. Đối với một số lý do tôi không thể nhận được các đối tượng được chèn vào bản đồ để xây dựng/hủy chỉ một lần.cách lấy bản đồ stl để xây dựng/hủy đối tượng được chèn chỉ một lần
Ví dụ:
struct MyObject{
MyObject(){
cout << "constructor" << endl;
}
~MyObject(){
cout << "destructor" << endl;
}
};
int main() {
std::map<int, MyObject> myObjectsMap;
myObjectsMap[0] = MyObject();
return 0;
}
lợi nhuận:
constructor
destructor
destructor
constructor
destructor
Nếu tôi làm:
typedef std::pair<int, MyObject> MyObjectPair;
myObjectsMap.insert(MyObjectPair(0,MyObject()));
lợi nhuận:
constructor
destructor
destructor
destructor
Tôi đang chèn các đối tượng chịu trách nhiệm về việc cấp phát bộ nhớ của riêng mình, vì vậy khi bị phá hủy chúng sẽ tự làm sạch bản thân, bị phá hủy nhiều lần sẽ khiến tôi gặp rắc rối.
rõ ràng, 'std :: map' không cung cấp giao diện không sao chép để tạo mục nhập mới. Tôi khuyên bạn nên chia sẻ con trỏ ở đây - 'std :: map >' –