我的std :: map被称为uniformBlocks。当我注意到一些奇怪的东西时,我正在测试添加新元素的方法。当我使用以下方法添加新密钥,值对时:
uniformBlocks["MatrixBlock"] = matrixBlock;
调用默认构造函数。但是,当我使用insert时,会调用复制构造函数,这是预期的。
uniformBlocks.insert(
std::pair<const std::string, glWrapper::UBO>("MatrixBlock", matrixBlock)
);
为什么两种方法之间存在差异。他们在引擎盖下以同样的方式实施了吗?
答案 0 :(得分:4)
[]
创建一个对象(如果该对象不存在),然后返回对它的引用。那时,没有任何论据可供使用。
=
然后分配给此引用。
insert
没有必要这样做。它可以使用您传入的对来简单地构建。
谨慎使用后,emplace
甚至可以取消复制或移动ctor电话。