我首先打印出所有“地址”。我试图理解的是为什么它在当时分配。我在构造函数&中构造了一个带有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
答案 0 :(得分:4)
第一个问题: 是的,STL-container具有值语义,并且您的对象被复制。
第二个问题: 可能是因为您的Copy Constructor没有调试打印。如果您尚未实现自己的自定义copy-ctor,则将使用默认的copy-ctr。
第三个问题: 您可以看到复制构造对象的析构函数调用(以及注释中的jkrok提及)