美文网首页Effective C++ 精读
Effective C++ Term 6 拒绝C++自动生成的函

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

作者: vancymoon | 来源:发表于2019-04-23 19:44 被阅读0次

    如果我们不想要编译器自动生成的 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() {}
    };
    

    相关文章

      网友评论

        本文标题:Effective C++ Term 6 拒绝C++自动生成的函

        本文链接:https://www.haomeiwen.com/subject/yjvbgqtx.html