我找到了一些关于 java 的问题的答案,但没有专门关于 c++ 的答案。所以我在Java中读到,首先创建对象,然后调用构造函数。我想知道这对于 C++ 来说是否是相同的过程?另外,如果是这种情况,那么拥有默认构造函数有什么意义呢?是为了继承吗?
“对象创建”在不同的语言中意味着不同的东西。但在 C++ 中,最突出的问题是“对象生命周期何时开始”。当一个对象的生命周期开始时,这意味着当它稍后结束时(您删除它,或者如果它是一个堆栈对象,那么当它超出范围时),将调用析构函数。
如果对象的生命周期没有正式开始,那么如果它稍后超出范围,则不会调用析构函数。
C++ 解决这个问题的方法如下:
- 当您通过调用构造函数创建一个对象(例如类类型)时,首先分配内存,然后运行构造函数。
- 当构造函数运行完成时,生命周期就开始了,析构函数结束时将被调用。析构函数完成后,内存将被释放。
- 如果构造函数通过抛出异常而中止,则不会调用该对象的析构函数。但是,内存仍然会被释放。
有关对象生命周期的更多信息,您可能需要查看例如这个问题,或者更好,达到标准/一本好的教科书。
基本思想是,在 C++ 中,我们尝试最小化内存分配和初始化之间的时间窗口——或者更确切地说,语言本身提倡“资源获取就是初始化”的思想,并使之成为可能。获取内存而不给它一个类型并初始化它是不惯用的。通常编写代码时,例如如果你有一个类型的变量A
,你可以把它想象成“这是指一个内存块A
,其中构造函数为A
成功地运行完成。”您通常不必考虑“这是一个大小为A
,但是构造函数失败了,现在它是一个未初始化/部分初始化的无头 blob。”
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)