zoukankan      html  css  js  c++  java
  • effective C++ 条款06如果你不想让编译器为你生成函数就应该明确拒绝

    大千世界可定有独一无二的东西(对象),copy构造函数没存在的意义,所以我们就要防止编译器为我们生成copy构造函数,在条款05我们也曾经提过:当我们调用copy构造函数时如果没有定义,编译器会自动为我们生成,我们如何拒绝编译器的盛情呢?我们想到了把自己的类里,声明个private的copy构造函数和copy assignment,如下:

    class HomeForeSale{
    
    public:
    
    private:
            HomeForeSale(const HomeForeSale&);
            HomeForeSale& operator=(const HomeForeSale&);
    
    
    

    但是这又有一个问题,如果这两个函数不慎在成员函数和友员函数里被调用了,编译器不会捕捉到错误,相反连接器会发生抱怨。

    如何将链接时的错误迁移到编译器呢,其实很简单我们只需要再为HomeForeSale声明一个基类,并把copy 构造函数和copy assignment 声明为private,并让HomeForeSale继承与它就行了,如下:

    class Uncopyable {
    protected:
      Uncopyable(){};
      ~Uncopyable(){};
    private:
            Uncopyable(const Uncopyable&);
            Uncopyable& operator=(const Uncopyable&);
    
    }
    
    class HomeForSale:private Uncopyable{
    
    };
  • 相关阅读:
    java 显示当前的时间
    java RandomAccessFile 向文件中写入数据,怎么样不覆盖原来的数据
    NCARG 6.2.0 安装方法
    【转】在Fedora 9下用IFC安装MM5
    Linux下GrADS的安装
    我的博客园
    nyist 2 括号配对问题
    nyist 100 1的个数
    进制(堆栈)
    进制
  • 原文地址:https://www.cnblogs.com/onlycxue/p/3048030.html
Copyright © 2011-2022 走看看