什么是合成构造函数
What is a synthesized constructor?
它是什么?我有一个模糊的理解,合成构造函数是编译器隐式创建的构造函数,它也初始化其成员类对象,但可能满足也可能不满足程序实现的需要。这个定义正确吗?
在什么情况下,它会被合成,在哪些情况下,不会?
下面的文章比我更好地回答了你的问题。我引用了这篇文章中的一段简短的话,让你了解一下它的味道。报价下方会显示一个链接。
顺便说一句,我引用的"C++参考指南"声称其中有529页营养丰富的C++信息;你可能想把它作为书签。
构造函数初始化对象。默认构造函数是指可以在没有任何参数的情况下调用。如果没有用户声明构造函数,如果该类不包含const或引用数据成员,C++隐式声明默认构造函数
这样一个隐式声明的默认构造函数执行创建此类型的对象所需的初始化操作。但是,请注意,这些操作不涉及用户声明的数据成员。
例如:
class C { private: int n; char *p; public: virtual ~C() {} }; void f() { C obj; // 1 implicitly-defined constructor is invoked }
C++为类C合成了一个构造函数,因为它包含虚拟成员功能。构造时,C++初始化隐藏的数据成员调用了虚拟指针,每个多态类有此指针保存调度表的地址,该调度表包含该类的所有虚拟成员函数的地址。
合成构造函数不初始化数据成员n和p,也不为后者所指向的数据分配存储器。一旦obj被建造。这是因为合成的默认构造函数仅执行实现——而不是程序员——来构造一个对象。
http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=15
相关文章:
- 是什么让放置新调用对象的构造函数?
- 如果我真的真的想从 STL 容器继承,并且我继承构造函数并删除新运算符,会发生什么?
- 使用基类指针调用基类的值构造函数的语法是什么?
- 这个C++编译器优化(在自身的实例上调用对象自己的构造函数)的名称是什么,它是如何工作的?
- 构造函数后面的宏.什么意思?
- C++构造函数内部会发生什么?
- 用相同的参数声明两个构造函数的最偶像化的方法是什么?
- 如果在 C++ 构造函数中以错误的顺序初始化对象数据,会发生什么类型的错误
- 我是否为邪恶刽子手的构造函数错过了什么?
- 构造函数中没有参数的对象类成员按什么顺序初始化?
- 什么时候用指针调用C++类构造函数
- 这个构造函数是做什么的
- 将复制构造函数设置为private和=delete有什么区别
- 我不明白在这个例子中什么时候调用构造函数
- 在C++中,从构造函数中将字符串文本分配给成员const char*变量时会发生什么
- c++ 17 中结构自动定义构造函数的规则是什么?
- 在C++中初始化带有和不使用构造函数调用的对象有什么区别
- C++什么时候是使用无默认构造函数与getter和setters与直接调用类中的变量的正确时机
- 在成员初始值设定项列表和构造函数主体中委派构造函数有什么区别
- 在不使用默认构造函数的情况下声明 POD 结构时,会实例化什么?