我有大型的复杂课程,我想这样做
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));
}
哪一个更好?
答案 0 :(得分:5)
如果您正在编写自己的复制构造函数,则应使用成员初始化并直接从源构造向量。
myEvents.Sort(
delegate(MyEvent e1, MyEvent e2)
{
DateTime dt1;
DateTime dt2;
DateTime.TryParse(e1.StartDateTime.MMDDYYYYHHMMSS, out dt1);
DateTime.TryParse(e2.StartDateTime.MMDDYYYYHHMMSS, out dt2);
return dt2.CompareTo(dt1); // descending
//return dt1.CompareTo(dt2); // ascending
}
);
现在,如果所有类成员都是可复制构造的,那么您不需要复制构造函数,因为编译器提供的构造函数就足够了。
答案 1 :(得分:4)
最好的方法是既不依赖也不让编译器完成它的工作。它会为你生成最佳的复制构造函数,除非你有特殊的数据成员(还有待观察)。然后,只有这样,您是否必须担心编写自己的复制构造函数(并且可以使用@NathanOliver指出的成员初始化)。
我知道它不是你的实际问题,而是与它紧密相关:如果你想使用带有vector参数的常规构造函数,最好的方法是使用成员初始化,它将调用{的复制构造函数{1}}(您的标准库将为此编写最佳代码)。
vector