• Thinking in C++ 第11章 引用和拷贝构造函数


    一、引用(reference)

    引用的规则

    1. 当引用被创建时它必须被初始化。

    2. 一旦一个引用被初始化为一个对象,它就不能改变为另一个对象的引用。

    3. 不能有NULL引用。必须确保引用和一块合法的存储单元关联。

     

    怎样选择引用和指针

    在下面两种情况下应使用指针:

    1. 存在不指向任何对象的可能,这种情况下你可能将指针设置为NULL

    2. 你需要在不同的时刻指向不同的对象。

    反之,如果总是指向一个对象,并且一旦指向一个对象后就不会改变指向,这种情况下应该使用引用。

    二、拷贝构造函数

    什么时候需要拷贝构造函数

    仅当需要按值传递的方式传递一个类对象时,我们才需要拷贝构造函数。

     

    什么时候需要自定义的拷贝构造函数

    1. 当拷贝构造函数除了拷贝外,还要做一些额外的事情时,需要自定义;

    2. 当类中包含指针成员时,需要自定义。因为默认的拷贝构造函数只拷贝指针,是浅拷贝。

     

    默认的拷贝构造函数是什么样的

    编译器递归地为所有基类和所有的成员对象调用拷贝构造函数。可以写一段代码验证一下:

     1 #include <iostream>
     2 using namespace std;
     3  
     4 class Super{
     5 public:
     6     Super(){}
     7     Super(const Super &super){
     8        cout << "Super Copy Constructor.\n";
     9     }
    10 };
    11  
    12 class Inner{
    13 public:
    14     Inner(){}
    15     Inner(const Inner &inner){
    16        cout << "Inner Copy Constructor.\n";
    17     }
    18 };
    19  
    20 class Sub : public Super{
    21 private:
    22     Inner in;
    23 };
    24  
    25 int main(){
    26     Sub sub1;
    27     Sub sub2 = sub1;
    28 }

    输出结果如下:

    Super Copy Constructor.

    Inner Copy Constructor.

     

    实现自己的拷贝构造函数

    当你由于某种原因需要实现自己的拷贝构造函数时,需要记住拷贝类中的某一部分。具体如下:

    1. 调用基类的拷贝构造函数。如果你不这样做,编译器会偷偷地调用基类的默认构造函数,而不是拷贝构造函数。

    2. 调用成员的拷贝构造函数。如果你不这样做,编译器会调用成员的默认构造函数,而不是拷贝构造函数。

    3. 对指针成员进行深拷贝。

    以后要看的

    1. 在汇编的层次上理解函数调用栈及其调用过程。

  • 相关阅读:
    ResultSet转换成List的方法
    恒星英语
    java中Float类型数据四舍五入
    总结JS打印方法
    jquery 点击除操作区域外的任意区域,将操作区域隐藏
    PowerDesigner pdm生成Access的方法
    reportbuilder设置打印页范围技巧_delphi教程
    SQL2000中因为选定的用户拥有对象,所以无法除去该用户.
    delphi 函数指针
    用ADO控件读EXCEL或DBF文件
  • 原文地址:https://www.cnblogs.com/hdtianfu/p/2294454.html
Copyright © 2020-2023  润新知