我的 std::map 被称为uniformBlocks。当我发现一些奇怪的东西时,我正在测试添加新元素的方法。当我使用以下方法添加新键值对时:
uniformBlocks["MatrixBlock"] = matrixBlock;
调用默认构造函数。但是,当我使用插入时,会调用复制构造函数,这是预期的。
uniformBlocks.insert(
std::pair<const std::string, glWrapper::UBO>("MatrixBlock", matrixBlock)
);
为什么这两种方法有区别。他们不是在引擎盖下以相同的方式实现的吗?
[]
如果对象不存在,则创建一个对象,然后返回对它的引用。那时,没有任何论据可用。
=
然后分配给这个引用。
insert
没有必要这样做。它可以简单地使用您传入的对就地构建。
小心使用,emplace
甚至可以取消复制或移动 ctor 调用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句