【发布时间】:2015-09-15 18:03:22
【问题描述】:
我有大型复杂课程,我想这样做
class A
{
///a lot of things
vector<something> vs;
};
和复制构造函数
A::A(const A& a)
{
vs=a.vs;
}
反对
A::A(const A& a)
{
copy(a.vs.begin(),a.vs.end(),back_inserter(vs));
}
哪个更好?
【问题讨论】:
-
@CIsForCookies,不,因为它使用了
back_inserter,这使得它没有错......只是不是最佳的。 -
@MegumiBear,如果
copy()版本更好,您不认为库实现者已经更改了赋值运算符来使用它吗?!所以它不能合理地更快或更有效,所以如果你认为长而复杂的表达式比做正确事情的短而简洁的表达式更好,它只会“更好”。但正如下面的答案所示,还有第三种更好的选择。 -
最好写你的类,这样默认生成的复制构造函数是正确的。如果不能,则将复杂部分包装在正确处理其复制的子类中,直到最终类在没有自定义复制构造函数的情况下工作。