Effective C++ Term 6 拒绝C++自动生成的函数

如果我们不想要编译器自动生成的 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() {}
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容