首页 > 编程语言 > 详细

Effective C++ 笔记(2)构造/析构/赋值运算

时间:2018-06-21 15:05:33      阅读:200      评论:0      收藏:0      [点我收藏+]

05、了解C++默默编写并调用哪些函数

  (1)、默认构造函数

Empty(){...} //调用父类构造函数,non-static成员变量构造函数,不会默认初始化内置类型

  (2)、析构函数

~Empty(){...} //调用父类析构函数,non-static成员变量析构函数

  (3)、拷贝构造函数

Empty(const Empty& rhs){...} //单纯地将来源对象的每一个non-static变量拷贝到目标对象

  (4)、赋值构造函数

Empty& operator=(const Empty& rhs){...} //单纯地将来源对象的每一个non-static变量拷贝到目标对象

  类内有引用、const、及父类的拷贝构造函数,赋值构造函数为private时,编译器会拒绝生成这一类函数。换言之,如果类内有引用、const成员变量,或者其父类的相关函数不可访问时,必须手动生成。

class Empty:
{
public:
    Empty(){...}
    Empty(const Empty& rhs){...}
    ~Empty(){...}
    
    Empty& operator=(const Empty& rhs){...}
private:
    const int m_cInt; //只读成员变量
    int &ref; //引用型成员变量,必须在每个构造函数手动初始化
};

  

06、若不想使用编译器自动生成的函数,就该明确拒绝

禁止被拷贝构造或赋值构造的做法:

  (1)、将相应成员函数声明为private且不去实现它。(链接期出错

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

  (2)、private继承Uncopyable类(编译期出错)

class Uncopyable
{
public:
    Uncopyable(){};
    ~Uncopyable(){};
private:
    Uncopyable(const Uncopyable& rhs);
    Uncopyable& operator=(const Uncopyable& rhs);
};

  

Effective C++ 笔记(2)构造/析构/赋值运算

原文:https://www.cnblogs.com/quehualin/p/9209074.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!