在不创建对象的情况下调用构造函数

Shr*_*yas 10 c++ constructor object

以下代码到底发生了什么?

#include<iostream.h>

class Demo
{
    public :

    Demo()
    {
        cout<<"\nIn Demo const";
    }
    ~Demo()
    {
        cout<<"\nin demo dest";
    }
};

void main() {
    Demo();
}
Run Code Online (Sandbox Code Playgroud)

Demo()只需调用构造函数和析构函数.是否在此过程中创建了对象?那么内存是分配的吗?

Kir*_*rov 19

您没有显式调用构造函数,而是此代码创建一个带有类型的临时未命名对象Demo,该对象在之后立即销毁;.

是的,为此临时对象分配(自动,在堆栈上)内存,并在之后释放(再次自动);.同时,正如预期的那样调用构造函数和析构函数.

  • 这是对的,但更奇怪的是:从语法上讲,___你不能自己调用​​构造函数.您只能创建对象,并且在创建对象时,将自动调用构造函数. (4认同)
  • @KirilKorov:不,`sizeof`永远不会为零.但是大多数编译器实际上不会将任何存储用于临时无数据对象,这可以通过"as-if"规则来实现. (3认同)
  • @KirilKirov感谢有关sizeof的信息,不知道. (2认同)