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

  • 相关阅读:
    socket注意
    PCM音频文件编码
    题外:分类篇(音乐风格分类)基于BP神经网络
    MFCC特征提取过程详解
    语音信号分析
    k-means聚类
    c++关键字详解
    vs中项目解决方案和项目的关系
    条件编译#ifdef 和#endif
    c++快捷键
  • 原文地址:https://www.cnblogs.com/zhonghuasong/p/7296063.html
Copyright © 2011-2022 走看看