【发布时间】:2019-10-08 16:30:45
【问题描述】:
我有一个疑问,我有一个映射,现在当我从映射中删除任何元素(使用擦除/删除 api)时,它会针对一些任意字符串存储类对象,是否会调用存储在该元素中的类对象的析构函数? 此外,当我插入类对象是我的映射对字符串值时,将调用类的 ctor 并在映射中创建对象的副本。我的理解在这里正确吗? 任何解释这些场景的链接都会有所帮助。
下面的代码会调用 Myclass 类的复制构造函数吗?我尝试在 MyClass 复制 ctor 中添加一个 cout,但在输出中没有看到它。
注意:对象按值存储在地图中。
QMap<QString, MyClass> testMap;
MyClass obj;
testMap.insert("test", obj);
testMap.remove("test");
【问题讨论】:
-
这取决于您在地图中存储对象的方式。如果它们是指向某个对象的指针,则不会调用该对象的析构函数。如果它们按价值存储,它会。插入也是如此。
-
您可以自己构建这样的地图来尝试。在构造函数和析构函数中使用日志语句来查看它们是否被调用。
-
任何人有任何链接可以让我了解这些情况下的预期行为吗?
-
尚未明确检查,但通常您应该在cpp reference 上找到任何相关内容。
-
如果你愿意深入挖掘,你可能会得到一个standard 的版本(最新的草稿,免费的,应该也可以)。
标签: c++ stl destructor