条款06:若不想使用编译器自动生成的函数,就该明确拒绝
Explicitly disallow the use of compiler-generated functions you do not what.
编译器产出的函数都是 public,如果想阻止这些函数被创建出来,并且没什么需求使用,可以将将它们声明为 private。即明确声明一个成员函数,阻止了编译器暗自创建其专属版本;而令这些函数为 private,使得客户无法调用它。
不过这个做法并不绝对安全,因为 member 函数和 friend 函数还是可以调用 private 函数。但是可以选择不去定义它们,这样如果不慎调用它们,会获得一个连接错误(linkage error)。即将成员函数声明为 private 而且故意不实现它们。
这里并不需要写函数参数名称,因为这些函数没有被实现,并且不会被调用。
如果想令许多类不能被复制,可以专门为阻止 copying 动作而设计一个 base class:
编译器构造的默认函数会尝试调用其 base class 的对应函数,但这些调用会被编译器拒绝,因为 base class 的拷贝函数是 private 的。
Last updated
Was this helpful?