• 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也是一种做法。

  • 相关阅读:
    freemarker list集合去重,实现hashset
    freemarker特殊字符输出
    idea java 注释模板配置
    IntelliJ IDEA使用eclipse compiler(ecj)解决lombok编译问题
    odoo views
    python 内置函数 3.6版本
    iostat
    性能及优化之 vmstat
    python 基础
    git
  • 原文地址:https://www.cnblogs.com/zhonghuasong/p/7296063.html
Copyright © 2020-2023  润新知