gpt4 book ai didi

c++ - 试图理解为什么 multimap 会像现在这样构造/分解结构

转载 作者:行者123 更新时间:2023-11-30 02:05:55 25 4
gpt4 key购买 nike

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

第一个问题:是复制Object吗?第二个问题:为什么我看到的析构函数多于构造函数?第三个问题:我从来没有得到我们在下面看到的任何构造函数中列出的地址(最后 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;

}

参数构造函数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

最佳答案

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

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

第三个问题:您会看到复制构造对象的析构函数调用(评论中也提到了 jkrok)

关于c++ - 试图理解为什么 multimap 会像现在这样构造/分解结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9258848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com