我遇到了一些代码,其中一个人重载了复制构造函数和赋值运算符,如下所示:
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;
...
}
Run Code Online (Sandbox Code Playgroud)
我觉得奇怪的是 Prod 类中的所有成员变量都不是指针。那么为什么需要像上面那样重载复制构造函数和 = 运算符呢?
如果该类不管理资源,那么您是对的,没有必要使它们过载。如果它被用作基类并且它有一个virtual析构函数,它们可能在那里遵守三规则,尽管 C++11 替代方案= default比实际实现它们更清晰。
在旁注中,可以使用复制构造函数来实现,operator =以避免重复逻辑:
Prod(const Prod& src) {
*this = src;
}
Run Code Online (Sandbox Code Playgroud)