0

我遇到了一些代码,其中一个人重载了复制构造函数和赋值运算符,如下所示:

 Prod(const Prod& src) {  
        _id    = src._id;
        _name  = src._name;
        _group = src._group;
        ...
}

 Prod& operator=(const Prod& src) {  
        _id    = src._id;
        _name  = src._name;
        _group = src._group;
        ...
}

我觉得奇怪的是 Prod 类中的成员变量都不是指针。那么为什么需要像上面那样重载复制构造函数和 = 运算符呢?

4

2 回答 2

5

如果类不管理资源,那么你是对的,没有必要重载它们。如果它被用作基类并且它有一个virtual析构函数,那么它们可能会遵守三法则,尽管 C++11 替代方案= default比实际实现它们更干净。

在旁注中,可以使用复制构造函数来实现operator =避免重复逻辑:

Prod(const Prod& src) {  
   *this = src;
}
于 2013-07-08T08:25:07.037 回答
3

以前是三规则,现在又是五规则,很可能会被零规则取代。

也许有人不确定魔杖只是添加了一些额外的代码.. ;)

一般来说,当所有成员字段都是简单的或自动管理的(即,使用适当的 ctors、copyctors、movectors、assignement、dtors 等)时,编写任何内容都没有意义。参见零规则。但是,这可能是在旧版本的标准下创建的代码的一部分,或者在某些编译器上创建的,嗯,多毛的,并且在过去的某个时间点可能需要它。现在可能你可以删除它并留给默认实现。

于 2013-07-08T08:28:23.423 回答