试图理解为什么multimap像它一样构造/解构

时间:2012-02-13 10:23:19

标签: c++ constructor destructor multimap

我首先打印出所有“地址”。我试图理解的是为什么它在当时分配。我在构造函数&中构造了一个带有String和Object的多图。这个对象的析构函数在调用它时我有一个打印输出。

第一个问题:是否复制了对象? 第二个问题:为什么我看到更多的析构函数而不是构造函数? 第三个问题:我从来没有得到我们在下面看到的任何构造函数中列出的地址(最后5个)

感谢您帮助我理解多图中的构造/销毁。

奥利弗

    std::multimap <string, TestObject> m;

for(int i = 0; i < 5 ;i++){

    TestObjectone("test", i);

    m.insert(pair<string, TestObject>(("a" + i), one));
    cout << "Single Iteration" <<  i << endl;

}

Param构造函数test0 0x22ff24 析构函数称为TestObject:test0 0x22ff08
析构函数名为TestObject:test0 0x22ff18
单次迭代0 析构函数名为TestObject:test0 0x22ff24
参数构造函数test1 0x22ff24
析构函数称为TestObject:test1 0x22ff08
析构函数称为TestObject:test1 0x22ff18
单次迭代1 析构函数称为TestObject:test1 0x22ff24
参数构造函数test2 0x22ff24
析构函数称为TestObject:test2 0x22ff08
析构函数称为TestObject:test2 0x22ff18
单次迭代2 析构函数称为TestObject:test2 0x22ff24
参数构造函数test3 0x22ff24
析构函数称为TestObject:test3 0x22ff08
析构函数称为TestObject:test3 0x22ff18
单次迭代3 析构函数名为TestObject:test3 0x22ff24
参数构造函数test4 0x22ff24
析构函数称为TestObject:test4 0x22ff08
析构函数称为TestObject:test4 0x22ff18
单次迭代4 析构函数称为TestObject:test4 0x22ff24

析构函数名为TestObject:test4 0x482f6c
析构函数称为TestObject:test3 0x482efc
析构函数称为TestObject:test0 0x482dd4
析构函数称为TestObject:test2 0x482e8c
析构函数称为TestObject:test1 0x482e1c

1 个答案:

答案 0 :(得分:4)

第一个问题: 是的,STL-container具有值语义,并且您的对象被复制。

第二个问题: 可能是因为您的Copy Constructor没有调试打印。如果您尚未实现自己的自定义copy-ctor,则将使用默认的copy-ctr。

第三个问题: 您可以看到复制构造对象的析构函数调用(以及注释中的jkrok提及)