美文网首页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