我找到了关于java的这个问题的一些答案,但没有特别关于c ++.所以我在Java中读到了首先创建对象,然后调用构造函数.我想知道这是否与c ++相同?此外,如果是这种情况,那么拥有默认构造函数有什么意义呢?是继承目的吗?
"对象创建"在不同语言中意味着不同的东西.但在C++中,最突出的问题是"对象生命何时开始".当一个对象的生命周期开始时,这意味着当它后来结束时(你删除它,或者如果它是一个堆栈对象,那么当它超出范围时),将调用析构函数.
如果对象的生命周期没有正式开始,那么如果它稍后超出范围,则不会调用析构函数.
C++解析如下:
当你创建一个对象,比如类类型,通过调用一个构造函数,首先分配内存,然后运行构造函数.
当构造函数运行完成时,生命周期已经开始,析构函数将在结束时被调用.析构函数完成后,内存将被释放.
如果构造函数通过抛出异常而中止,则不会调用该对象的析构函数.但是,内存仍将被释放.
有关对象生命周期的更多信息,您可能希望在标准/好的教科书中查看此问题,或者更好.
基本思想是,在C++中,我们尝试最小化分配内存和初始化之间的时间窗口 - 或者更确切地说,语言本身促进了"资源获取是初始化"的想法并使其成为可能非惯用于获取内存而不给它一个类型并初始化它.当通常编写代码时,例如,如果你有一个类型的变量A
,你可以把它想象成"这指的是一个内存块A
,一个构造函数A
成功运行完成." 你通常不必考虑"这是一个大小的内存块A
,但构造函数失败了,现在它是一个未初始化/部分初始化的无头blob".