zoukankan      html  css  js  c++  java
  • Effective C++ 条款06:若不想使用编译器自动生成的函数,就该明确拒绝

    规则一 将成员函数声明为private而且故意不实现他们

    class HomeForSale {
    public:
    	...
    private:
    	...
    	HomeForSale(const HomeForSale&);             // 只有声明
    	HomeForSale& operator=(const HomwForSale&);  // 只有声明
    }
    

    有的时候为了阻止copy构造函数或者copy assignment操作符,可以将他们声明为private,但是这个做法不绝对安全,因为member函数和friend函数还是可以调用private函数的。但是如果你只声明,不实现它们的话,当调用者调用的时候会报链接错误(linkage error)。

    规则二 将链接错误移至编译期

    class Uncopyable {
    protected:
    	Uncopyable () {}      // 允许derived对象构造和析构
    	~Uncopyalbe () {}
    private:
    	Uncopyable(const Uncopyable&);   // 但阻止copying
    	Uncopyable& operator=(const Uncopyable&);
    };
    class HomeForSale: private Uncopyable {  // class不再声明copy构造函数或copy assign.操作符
    }
    

    总结

    为驳回编译器自动(暗自)提供的机能,可将相应的成员函数声明为private并且不予实现。
    使用像Uncopyable这样的base class也是一种做法。

  • 相关阅读:
    xp下双开3389源码
    批处理加密解密原理
    Durango框架开源
    细说PHP5.3.4变量的引用赋值
    svnversion
    sqlite 的使用
    message日志_默认是一周一个日志,保存4周
    Smartmontool 使用
    NETRA之数据库处理
    mysql 日志转
  • 原文地址:https://www.cnblogs.com/zhonghuasong/p/7296063.html
Copyright © 2011-2022 走看看