std::map 在 [] 上调用默认构造函数,在 insert() 上调用复制构造函数

阮孟

我的 std::map 被称为uniformBlocks。当我发现一些奇怪的东西时,我正在测试添加新元素的方法。当我使用以下方法添加新键值对时:

uniformBlocks["MatrixBlock"] = matrixBlock;

调用默认构造函数。但是,当我使用插入时,会调用复制构造函数,这是预期的。

uniformBlocks.insert(
    std::pair<const std::string, glWrapper::UBO>("MatrixBlock", matrixBlock)
);

为什么这两种方法有区别。他们不是在引擎盖下以相同的方式实现的吗?

Yakk - Adam Nevraumont

[]如果对象不存在,则创建一个对象,然后返回对它的引用。那时,没有任何论据可用。

= 然后分配给这个引用。

insert没有必要这样做。它可以简单地使用您传入的对就地构建。

小心使用,emplace甚至可以取消复制或移动 ctor 调用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在C结构上调用默认构造函数

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

如何在已分配的结构中的std :: queue <>上调用构造函数

当传递给另一个对象时,为什么在const对象上调用std :: move会调用复制构造函数?

从std :: map调用函数

在移动构造函数中的unique_ptr上调用std :: move时出现“错误:使用已删除的函数”

构造函数在return语句上调用

在构造函数方法上调用方法

如何在仅具有受保护或私有构造函数的类上调用:: std :: make_shared?

std :: thread通过引用传递调用复制构造函数

C ++ std transform多次调用复制构造函数

为什么 std::make_unique 调用复制构造函数

std :: map默认构造函数是否显式?

如果 std::vector 使用移动构造函数将对象重新分配到新内存,那么为什么必须在原始对象上调用析构函数?

将std :: function移至另一个std :: function不会在捕获的变量上调用move构造函数

std :: map和private构造函数

为构造的std :: vector中的每个元素调用默认构造函数

没有匹配的成员函数可调用std :: unordered_map :: insert()

错误致命错误:在非对象上调用成员函数insert()

PHP:致命错误:在非对象上调用成员函数insert()

std可选复制构造函数

如何在JavaScript中的对象上调用构造函数?

是否可以在现有实例上调用构造函数?

为什么构造函数总是在堆栈上调用?

C ++ 17复制构造函数,在std :: unordered_map上进行深层复制

C++“const std::any &”比没有 std::any 更多的复制构造函数调用

laravel-在数组上调用成员函数map()

如何隐式调用包装在std :: map集合中的shared_ptr中包装的值的构造函数

std::map 对象析构函数被调用?