美文网首页
C++默认构造函数的创建

C++默认构造函数的创建

作者: VictorHong | 来源:发表于2020-09-22 14:48 被阅读0次

C++新手一般有两个常见的误解:

  1. 任何class 如果没有定义default constructor,就会被合成出一个来.
  2. 编译器合成出来的default constructor 会明确设定“class内每一个datamember的默认值”。

但是,C++默认构造函数只有在一下四种情况才会进行默认的构造函数创建!

  1. 带有Default Constructor 的Member Class Object

    如果一个class没有任何constructor,但它内含一个member object,而后者 有default constructor,那么这个class的implicit default constructor 就是 “nontrivial”,编译器需要为此class合成出一个default constructor。不过这个 合成操作只有在constructor真正需要被调用时才会发生。

    例子:Bar会生成一个默认的构造函数

    带有默认构造函数的成员类对象

    提示:被合成的默认构造函数只是满足编译器的需要,而不是程序的需要。

  2. “带有 Default Constructor”的 Base Class

    如果一个没有任何constructors的class派生自一个“带有default constructor”的base class,那么这个derived class的default constructor会被视为nontrivial,并因此需要被合成出来。它将调用上一层base classes的default constructor(根据它们的声明次序)。对一个后继派生的class而言,这个合成的constructor和一个“被明确提供的default constructor”没有什么差异。

  3. “带有一个 Virtual Function”的Class

    构造函数的构建主要是为了初始化或者更新虚函数指针

    例子

    虚函数构造函数
  4. “带有一个Virtual Base Class”的Class

    例子:

    虚基类

在合成的default constructor中,只有base class subobjects和member classobjects会被初始化。所有其它的 nonstatic data member,如整数、整数指针、整数数组等等都不会被初始化。这些初始化操作对程序而言或许有需要,但对编译器则并非必要。如果程序需要一个“把某指针设为0”的default constructor,那么提供它的人应该是程序员。

相关文章

  • c++构造函数

    构造函数 引入 在c++的类中,构造函数是一种特殊的成员函数,在每次创建创建一个类的时候会默认调用构造函数进行初始...

  • C++ - 构造函数与析构函数

    参考链接 一、构造函数 C++规定,每个类必须有默认的构造函数,没有构造函数就不能创建对象。 若没有提供任何构造函...

  • C++:面向对象基础

    构造函数 C++中有三种构造函数:默认构造函数,有参构造函数,拷贝构造函数 类对象的初始化 括号法//默认构造函数...

  • GeekBand C++面向对象高级编程(上) Second W

    C++ Big Three 首先是默认构造函数(default constructor) 的概念,默认构造函数是没...

  • C++默认构造函数的创建

    C++新手一般有两个常见的误解: 任何class 如果没有定义default constructor,就会被合成出...

  • 磨刀- Dart 类

    ✨✨✨✨✨ 魏什么_多喝水 Flutter 之路 声明: 创建实例 构造函数 默认构造函数默认构造函数,如果类没有...

  • 类可以没有构造函数和析构函数吗

    C++提供的默认函数 首先说一下一个C++的空类,编译器会加入哪些默认的成员函数 默认构造函数和拷贝构造函数 析构...

  • C++基础③new对象,继承,友元函数,函数的可变参数

    接续上篇C++基础②构造函数,析构函数,拷贝构造函数 前言 C++是一门面向对象的编程语言 , 创建用以创建对象 ...

  • deleted function

    C++会给类型生成一些默认函数:默认构造函数、复制构造函数、赋值函数等等。如果你不想要这些函数,比如你的类型没有复...

  • [剑指offer]01-赋值运算符函数

    在面向对象C++语言中,用户定义一个类时,会默认生成四个成员函数:默认构造函数、默认析构函数、默认复制构造函数和默...

网友评论

      本文标题:C++默认构造函数的创建

      本文链接:https://www.haomeiwen.com/subject/rrywyktx.html