这在运行时崩溃。

std::map<std::string, MyClass> myMap;
myValue = new MyClass();
myMap["myKey"] = *myValue;

我有2个要求:
  • MyClass的实例保存在堆中(因此使用new);
  • 我能够通过一个关联数组来引用它们(因此使用了std::Map)。

  • 为什么在示例中不能成功使用取消引用运算符?我如何一次完成两个任务?

    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/

    10-09 06:04
    查看更多