首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试图理解multimap为什么像它那样构造/下降

试图理解multimap为什么像它那样构造/下降
EN

Stack Overflow用户
提问于 2012-02-13 10:23:19
回答 1查看 243关注 0票数 1

我先给你打印了所有的“地址”。我想要理解的是为什么它在当时被分配。我已经用一个字符串和一个对象构造了一个multimap,在这个对象的构造函数&析构函数中,当调用它们时,我有一个打印输出。

第一个问题:它是在复制对象吗?第二个问题:为什么我看到的析构函数比构造函数多?第三个问题:我从来没有得到以下构造函数中列出的地址(最后5个)。

谢谢你帮助我理解这个在multimap的建筑/破坏。

奥利弗

代码语言:javascript
复制
    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。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-13 10:26:20

第一个问题:是的,STL容器有一个值语义,并且您的对象被复制.

第二个问题:可能是因为您的复制构造器没有调试打印。如果您还没有实现您自己的定制复制-ctor,那么将使用默认的copy。

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9258848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档