请考虑这段代码:
class A
{
};
int main()
{
std::vector<A> test;
test.push_back(A());
}
构造函数和析构函数将被调用两次,内存将被分配两次并且对象将被复制,现在这不仅可能对性能不利,还可能导致运行时错误,特别是如果析构函数中正在进行一些清理。我通常解决这个问题的方法是创建一个指针向量:
std::vector<A*> test;
test.push_back(new A());
我的问题有两个,这是常见做法还是好的做法?或者,还有更好的方法?
如果事实证明这是一个骗局,请告诉我,我会关闭问题,但我在搜索中找不到任何内容。
Use emplace_back http://en.cppreference.com/w/cpp/container/vector/emplace_back.
std::vector<A> test;
test.emplace_back();
//test.emplace_back(constructor, parameters);
这边走,A
将就地构建,因此不会发生复制或移动。
编辑:澄清对这个问题的评论 - 不,这不会改变push_back
如果你暂时通过它。例如,
test.emplace_back(A{});
在 C++11 中,将导致临时 A 被构造、移动和销毁,就像您使用push_back
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)