我先给你打印了所有的“地址”。我想要理解的是为什么它在当时被分配。我已经用一个字符串和一个对象构造了一个multimap,在这个对象的构造函数&析构函数中,当调用它们时,我有一个打印输出。
第一个问题:它是在复制对象吗?第二个问题:为什么我看到的析构函数比构造函数多?第三个问题:我从来没有得到以下构造函数中列出的地址(最后5个)。
谢谢你帮助我理解这个在multimap的建筑/破坏。
奥利弗
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
单Iteration0
析构函数称为TestObject: test0 0x22ff24
Param构造函数test1 0x22ff24
析构函数称为TestObject: test1 0x22ff08
析构函数称为TestObject: test1 0x22ff18
单Iteration1
析构函数称为TestObject: test1 0x22ff24
Param构造函数test2 0x22ff24
析构函数称为TestObject: test2 0x22ff08
析构函数称为TestObject: test2 0x22ff18
单Iteration2
析构函数称为TestObject: test2 0x22ff24
Param构造函数test3 0x22ff24
析构函数称为TestObject: test3 0x22ff08
析构函数称为TestObject: test3 0x22ff18
单Iteration3
析构函数称为TestObject: test3 0x22ff24
Param构造函数test4 0x22ff24
析构函数称为TestObject: test4 0x22ff08
析构函数称为TestObject: test4 0x22ff18
单Iteration4
析构函数称为TestObject: test4 0x22ff24
析构函数称为TestObject: test4 0x482f6c。
析构函数称为TestObject: test3 0x482efc。
析构函数称为TestObject: test0 0x482dd4
析构函数称为TestObject: test2 0x482e8c。
析构函数称为TestObject: test1 0x482e1c。
发布于 2012-02-13 10:26:20
第一个问题:是的,STL容器有一个值语义,并且您的对象被复制.
第二个问题:可能是因为您的复制构造器没有调试打印。如果您还没有实现您自己的定制复制-ctor,那么将使用默认的copy。
第三个问题:您可以看到复制构造的对象的析构函数调用(如jkrok在注释中提到的)。
https://stackoverflow.com/questions/9258848
复制相似问题