【发布时间】:2018-07-25 13:29:49
【问题描述】:
我在看书
Robert Lafore 的 C++ 中的面向对象编程 并提到(第 235 页)
"如果没有构造函数,编译器会自动在程序中内置一个隐式的无参数构造函数,并且是这个构造函数创建了对象,即使我们没有定义它在类中。这个无参数的构造函数称为默认构造函数。如果它不是由构造函数自动创建的,您将无法创建没有定义构造函数的类的对象。”
构造函数是否创建对象?
我了解构造函数可用于初始化对象。但即使我不需要初始化我正在创建的类的对象,编译器也会生成一个默认构造函数。因此,我怀疑构造函数还有其他用途/需要。有吗?
【问题讨论】:
-
如果不通过调用构造函数,你还能如何创建对象?
-
关于构造函数的术语有点误导(恕我直言)。构造函数实际上并不construct 或create 对象,在调用构造函数时对象已经创建。构造函数真正做的是初始化已经创建的对象。
-
构造函数初始化对象,也就是初始化成员等。它并没有真正为它分配内存等,这是之前完成的。关于总有一个构造函数的事实是因为让生活更轻松,语言更容易解析
-
据我所知,它实际上只是一个初始化器,如果不需要初始化,它可以被优化掉。就像你有一块 (void*) 内存一样,你应该能够在不调用构造函数的情况下将它转换为一个普通对象,并且该对象应该可以正常工作(如果它确实需要构造,那么你需要通过placement-new调用该内存块上的构造函数。
-
@pasha 我推荐 C++ Primer,第 5 版,而不是您正在阅读的版本;它也是the definitive C++ book guide and list 的一部分。
标签: c++ constructor default-constructor