zoukankan      html  css  js  c++  java
  • 三五法则

    首先自己好好梳理下自己的理解,然后:

    琢磨设计段100行的代码进行debug,覆盖这6个动作的发生,观察其语义行为。

      1. Home类:成员变量包含 内置类型、Man*、Dog、vector<Chair>

      2. 包含函数的调用/返回、对象拷贝等行为。

      3.  default版本 vs 自定义版本  ,比较其构造的值的变化。


    默认构造(无参)   T()

    拷贝构造       T(const T& )
    移动构造       T()

    拷贝赋值       T& operator=(T& )
    移动赋值       T& operator=(T&& )

    析构         ~T()

    ===============================================
    以上6个行为是instance从{创建--传递--析构} 必用的6个语义。
    如果没自行delete,就存在。(当定义了其他无参构造函数时,默认无参构造如果未default显示保留,会被丢弃)
    ===============================================
    ★ 搞清它们在什么时候被(隐式)调用?

      对于一句初始化语句,分清楚它采用的是何种初始化方式。

    ★ 搞清每一种行为编译器默认版本的语义

       对不同类型的成员,它是如何的?
    ★ 判断什么时候可以使用默认提供的版本,什么时候必须重写/ 如何重写?

    + 自行定义的指定值初始化(有参构造):

      若member a; 在自定义的构造函数中未进行初始化,会怎么样?未定义了 还是该成员使用默认的初始化行为?

    + T foo() {...}

          之前debug发现,返回的对象用的是 拷贝构造、而非赋值。


    定义define、初始化initialize、赋值assign是两回事: 

    ——构造instance时:

        step1: 先初始化其成员(分配内存、赋初值(成员变量可设置初值/ 未指定则采用系统默认初值))

        step2: 若有指定值则再进行赋值 。(通过构造函数的调用参数指定值)

    p.s.  某些情形下,定义内置类型变量时 并不会进行初始化,其值是未定义的。

      “定义一个变量”  (!=定义一个函数/类) 的语义只是:分配内存、指定变量名。(不包含值的初始化)

    =====================================================================================

    ==================================================================================

    =========================================================================================


     默认构造函数

    7.1.5节,

    7.5.3 节

    P236:

     

    拷贝构造函数

      对其各成员 都采取‘拷贝新的相同值的一份’的语义:   ①内置类型、指针、乃至数组直接值拷贝  ②类类型调用其拷贝构造函数进行拷贝。

      所谓“浅拷贝”:对于指针成员,只拷贝指针、不拷贝指针所指向的对象。 有的时候不能采用这种行为。

     P441:

     


    2.2.1节 变量定义

    3.2.1节 定义和初始化string对象

          <第13章 拷贝控制> 全面细致的讨论了这些问题...

    13.1.1节 拷贝构造函数

  • 相关阅读:
    使用.Net Core RT 标准动态库
    X509 颁发者和使用者 详解
    .Net Core 中X509Certificate2 私钥保存为 pem 的方法
    dpkg:处理软件包 mysql-server-5.5 (--configure)时出错
    sql server time(7) 默认值
    如何 打包整合linux系统文件夹 用于刷机包等等, 其中包括打包 句号开头 . 开头的文件, 排除系统文件 等
    Visual Studio 2015中 安卓环境 cannot find adb.exe in specified sdk path
    PuTTY 命令行改进 有效解决 中文乱码
    System.Windows.Forms.WebBrowser中 处理 js 脚本 window.Open 禁止新建窗口 的方法
    rest_framework之认证与权限 token不存数据库认证
  • 原文地址:https://www.cnblogs.com/nanlan2017/p/9236744.html
Copyright © 2011-2022 走看看