不,这是不必要的.
如果你仔细阅读"三法则",你会注意到关于基类没有任何说法,只能根据类的适当属性和行为做出决定.
#include <iostream>
struct A {
A(): a(0) {}
A& operator=(A const& rhs) { a = rhs.a; return *this; }
int a;
};
struct B: A { B(): b(0) {} int b; };
int main() {
B foo;
foo.a = 1;
foo.b = 2;
B bar;
bar = foo;
std::cout << bar.a << " " << bar.b << "\n";
}
// Output: 1 2
Run Code Online (Sandbox Code Playgroud)
这实际上是封装的真正力量.因为使用Rule of 3成功,在使基类的行为变得健全时,其派生类不需要知道复制构造函数是由编译器默认还是手动实现(并且复杂),这对用户来说都很重要(并且派生类是用户),是复制构造函数执行复制.
该三规则提醒的美国实现细节,以帮助实现正确的语义.与所有实现细节一样,它仅对此类的实现者和维护者有用.
归档时间: |
|
查看次数: |
1618 次 |
最近记录: |