什么时候std :: map调用映射类型的构造函数?

时间:2014-09-18 15:53:25

标签: c++ c++03

如果我有这样的容器......

std::map <std::string, IHaveAReallyExpensiveConstructor_t>

我保证只有在地图中创建新元素时才会调用构造函数IHaveAReallyExpensiveConstructor_t(),例如std::map::operator[]吗?

如果重要,只有默认构造很难。复制结构很便宜,而不是真正的问题。

2 个答案:

答案 0 :(得分:5)

在C ++ 11中,operator[]std::map上唯一需要mapped_value默认构造的操作;所以这是唯一可以默认构造一个值的操作。如果您不提供任何构造函数参数,emplace也将默认构造一个值。

如果您的实现不符合C ++ 11,则无法保证其他操作不会构造值;但没有理由为什么任何理智的实施。

答案 1 :(得分:0)

有两种情况: -

my_map [key] = value

1)如果键不在地图中,则复制&#34; value&#34;的构造函数。将被调用以在地图中制作该对象的副本。

2)如果地图中已存在密钥,则会调用该对象的赋值运算符。