如果我们不想要编译器自动生成的 copy constructor 或者其他一些函数应该怎么办呢?
方法一
将 copy 构造函数或 copy assignment 操作符声明为private,这样人们一般不能够成功调用到它们。但不保证绝对安全,因为 member 函数和 friend 函数仍然可以访问到它们
方法二
这种方式更为精妙一些,那就是将成员函数声明为 private
且不去实现,这样非法的调用就会在 linking 阶段受到阻拦。对于 C++ 11 标准,我们还可以用 delete
关键字,更为简洁
方法三
如果能将 linking 阶段的错误提前到 compiling 阶段就更好了,为此可以设计一个不允许 copy 动作的 base class
class Uncopyable {
public:
Uncopyable(const Uncopyable &) = delete;
Uncopyable &operator=(const Uncopyable &) = delete;
protected:
Uncopyable() {}
};
网友评论