请考虑以下代码:
class A
{
};
int main()
{
std::vector<A> test;
test.push_back(A());
}
构造函数和析构函数将被调用两次,内存也将被分配两次,并且对象将被复制,现在不仅对性能有潜在的负面影响,它还可能导致运行时错误,特别是当析构函数中正在进行一些清理时。我通常要做的就是创建一个指针向量,而不是:
std::vector<A*> test;
test.push_back(new A());
我的问题有两方面,这是一种普遍的做法,它是否良好的做法?还是有更好的方法?如果这是一个骗局,请让我知道,我会结束这个问题,但我找不到任何东西。
发布于 2016-10-29 21:17:45
使用emplace_back
。
std::vector<A> test;
test.emplace_back();
//test.emplace_back(constructor, parameters);
这样,A
将被就地构造,因此不会发生复制或移动.
编辑:要澄清对问题的评论-不,如果您将其传递为临时的话,这将不会从push_back
中更改。例如,
test.emplace_back(A{});
Will,在C++11中,会导致临时A被构造、移动和销毁,就像您使用push_back
一样。
https://stackoverflow.com/questions/40323722
复制相似问题