析构函数在地图

时间:2017-04-23 03:24:32

标签: c++ copy-constructor stdmap

我正在尝试将自定义对象添加到我的地图中,前提是它尚未存在。如果它存在,我正在调用一个函数,该函数将添加到我的自定义对象的现有缓冲区中。执行此函数时,我看到析构函数在CustomObject上被调用了两次,因此,第二次调用析构函数会导致"无效地址传递给free"问题。我是新来的地图,并会欣赏一些修复代码的技巧。我假设在地图上调用insert会生成myobject的副本,只要地图保持在范围内,它就会保留在范围内。

MyObject::MyObject():
    mBuffer(nullptr)
{

}
MyObject:: ~MyObject()
{
    free(mBuffer);
    mBuffer = nullptr;

}
MyObject::Append(p_someData):
{
 //Calls malloc on mbuffer and copies data from someData into mBuffer
}

void AnotherObject::AddResulttoMap(const p_otherobject *result,uint32_t index)
{
    MyObject curObject;
    if (mMyObjectsMap.find(index) == mMyObjectsMap.end())
    {
        curObject.Append(result->result);
        mMyObjectsMap.insert(std::pair<uint32_t, MyObject >(index, curObject));
        std::cout << "DEBUG: Writing new object for index" << unsigned(index) << std::endl;
    }
    else
    {
        curObject= mMyObjects.find(index)->second;
        curObject.Append(result->result);
        std::cout << "DEBUG: Appending into result for index" << unsigned(index) << std::endl;
    }
}

0 个答案:

没有答案