这在运行时崩溃。
std::map<std::string, MyClass> myMap;
myValue = new MyClass();
myMap["myKey"] = *myValue;
我有2个要求:
为什么在示例中不能成功使用取消引用运算符?我如何一次完成两个任务?
PS。我正在使用gcc。
最佳答案
如果丢失了myValue
的范围,则可能是内存泄漏。因此,最好将MyClass*
存储在 map 中。
std::map<std::string, MyClass*> myMap;
myValue = new MyClass();
myMap["myKey"] = myValue;
在给定的示例中,还要确保在删除
delete
或从map<>
删除元素时,对元素进行boost::shared_ptr
。如果您不想担心内存管理,可以使用智能指针(例如*myClass
)。另外,从您给出的示例中,我不知道为什么在取消引用
MyClass::MyClass(const MyClass&)
时它应该崩溃。您是否在复制构造函数ojit_code中做一些奇怪的事情?关于c++ - 将堆对象分配给std::map,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6775180/