Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在不创建对象的情况下调用构造函数_C++_Object_Constructor - Fatal编程技术网

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

C++ 在不创建对象的情况下调用构造函数,c++,object,constructor,C++,Object,Constructor,下面的代码中到底发生了什么 #include<iostream.h> class Demo { public : Demo() { cout<<"\nIn Demo const"; } ~Demo() { cout<<"\nin demo dest"; } }; void main() { Demo(); } #包括 课堂演示 { 公众: 演示() { co

下面的代码中到底发生了什么

#include<iostream.h>

class Demo
{
    public :

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

void main() {
    Demo();
}
#包括
课堂演示
{
公众:
演示()
{

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


是,为该临时对象分配内存(自动,在堆栈上),并在
之后释放内存(再次自动释放)。同时,按预期调用构造函数和析构函数。

是,分配内存,但在堆栈上,
Demo()
正在创建一个自动销毁的临时对象。

Begin picky:在本例中,该对象没有任何成员,也不涉及继承。因此该对象不需要堆栈上的任何空间。至少,任何健全的编译器都会将其优化为普通函数调用。@KirilKorov:no,
sizeof
永远不能为零。但是大多数编译器实际上不会为临时无数据对象使用任何存储,这一点根据“仿佛”规则是可以的。我要补充的是:(1)分配(很可能)不会消耗任何CPU时间,因为在分配/释放期间没有执行任何实际操作(编译器只是在堆栈帧中保留1字节内存)(2)理论上,即使是分配(内存保留)也可能因“假设规则”而优化@KirilKirov感谢您提供有关sizeof的信息,我不知道。这是对的,但更奇怪的是:从语法上讲,您不能自己调用构造函数。您只能创建对象,在创建对象后,构造函数将自动被调用。