我有一个疑问,我有一个映射,该映射现在针对某些任意字符串存储类对象,当我从映射中删除任何元素(使用擦除/删除api)时,存储在该元素中的类对象的析构函数将被调用吗? 另外,当我插入类对象是针对字符串值的地图时,将调用类的ctor并将在地图中创建对象的副本。我的理解在这里正确吗? 任何解释这些情况的链接都将有所帮助。
下面的代码将调用类Myclass的副本构造函数吗?我尝试在MyClass复制ctor中添加一个cout,但在输出中没有看到它。
注意:对象按值存储在map中。
QMap<QString, MyClass> testMap;
MyClass obj;
testMap.insert("test", obj);
testMap.remove("test");
答案 0 :(得分:1)
由于对象是按值存储的,因此您将在地图中存储新的实例。这意味着将在插入时调用ctor。在大多数插入中,将使用复制/移动ctor,但是可以使用emplace...
方法选择其他ctor。当您在向量中创建默认值时,会通过使用默认值ctor来设置其初始大小或将其扩展。
同样,当从地图上删除或删除对象时,该对象将被销毁,因此将调用其dtor。对此没有什么特别的魔术:对象生命周期的常规规则在这里适用。