编译器需要implicit nontrivial default constructor情况

    技术2025-11-15  10

    被合成物称为implicit nontrivial default constructor。被合成出来的Constructor只能满足编译器(而非程序)的需求,它之所以能够完成任务,是借着”调用member object或base class的default Constructor“或者”为每一个object初始化其virtual function机制或virtual base class机制“而完成。在合成的default constructor中,只有base class subobjects和member class objects会被初始化。所有其他的nonstatic data membe,如整数、整数指针、整数数组等等都不会被初始化。

    1、带有“Default Constructor”的Member Class Object:

    2、带有“Default Constructor”的Base Class;

    3、带有一个"Virtual Function"的Class;

    4、带有一个"Virtual Base Class"的Class;

     

    至于没存在这四种情况而没有声明任何Constructor的classes,我们说他们拥有的是implicit trivial default constructor,它们实际上并不会被合成出来。

     

    --《Inside The C++ Object Model》

    最新回复(0)