zoukankan      html  css  js  c++  java
  • 复制构造函数

    这个算是c++非常基础的东西,感觉知道有这个东西,但里面的原因不知道,有点蛋疼,今天又翻开了曾经看过的c++primer,看的时候感觉都看过

    只有单个形参,而且该形参是对本类类型对象的引用(常用 const 修饰),这样的构造函数称为复制构造函数。与默认构造函数一样,复制构造函数可由编译器隐式调用。复制构造函数可用于:

    • 根据另一个同类型的对象显式或隐式初始化一个对象。
    • 复制一个对象,将它作为实参传给一个函数。//隐式调用
    • 从函数返回时复制一个对象。//隐式调用
    • 初始化顺序容器中的元素。
    • 根据元素初始化式列表初始化数组元素

    当用于类类型对象时,初始化的复制形式和直接形式有所不同:直接初始化
    直接调用与实参匹配的构造函数,复制初始化总是调用复制构造函数。复制初始
    化首先使用指定构造函数创建一个临时对象(第 7.3.2 节),然后用复制构造
    函数将那个临时对象复制到正在创建的对象

    string null_book = "9-999-99999-9"; // copy-initialization
    string dots(10, '.'); // direct-initialization
    string empty_copy = string(); // copy-initialization
    string empty_direct; // direct-initialization

    null_book首先调用构造函数参数为字符串生成一个临时对象,然后调用复制构造函数初始化null_book为临时对象的副本

    和赋值操作符的区别:赋值操作符只是对=的重写不是构造函数,而复制构造函数是构造函数

    一般情况下不需要重新定义复制构造函数和赋值操作符,但以下清空除外:

    这样的类经常有一个,数据成员是指针,或者有成员表示在构造函数中分配的其他资源。而另一些类在创建新对象时必须做一些特定工作。这两种情况下,都必须定义复制构造函数。
    一般需要复制构造函数的也需要赋值操作符,原因一样有可能成员函数是指针类型,但生成另一个对象时只是赋值了指针但没有分配相应的内存。
    具体不懂可以再查阅c++primer

  • 相关阅读:
    linux 常用命令-编辑模式
    关于react虚拟DOM的研究
    oracle 分页的sql语句
    react+webpack+wepack-dev-server的环境中ant design图标离线的方法
    oracle 语句之对数据库的表名就行模糊查询,对查询结果进行遍历,依次获取每个表名结果中的每个字段(存储过程)
    eclipse 中使用git
    好东西要分享
    《梦断代码》阅读笔记二
    《梦断代码》阅读笔记一
    第二段冲刺进程4
  • 原文地址:https://www.cnblogs.com/zzyoucan/p/3674364.html
Copyright © 2011-2022 走看看