【发布时间】:2018-07-18 21:30:03
【问题描述】:
我有一个 std::map,它有一个 int 作为键,一个对象指针作为值。在创建时,我应该先单独实例化对象,然后将它们插入容器中,还是可以直接在插入方法中调用“新”标签?除了简化代码之外,使用其中之一有什么好处吗?
map<int, Foo*> sample;
Foo* foo = new Foo();
sample.insert(pair<int, Foo*>(0, foo)); //case 1
sample.insert(pair<int, Foo*>(0, new Foo())); //case 2
【问题讨论】:
-
两者都是正确的。取决于你以后是否想要
foo。作为旁注,您不妨使用.emplace。 -
或者 sample[0] = new Foo(),这在语义上是不同的,但在这种情况下是等效的。
-
案例 2 允许移动构造,但您使用的是指针,而指针移动的效率并不比它们在任何现实架构上复制的效率高。
-
谢谢,伙计们。它澄清了它们都被接受,尽管适用于不同的情况。
标签: c++ dictionary object insert stdmap