【问题标题】:Calling a constructor without creating object调用构造函数而不创建对象
【发布时间】:2013-09-24 09:09:46
【问题描述】:

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

#include<iostream.h>

class Demo
{
    public :

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

void main() {
    Demo();
}

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

【问题讨论】:

    标签: c++ object constructor


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 开始挑剔:在这个例子中,对象没有任何成员,也不涉及继承。因此,该对象不需要堆栈上的任何空间。至少,任何理智的编译器都会将其优化为普通的函数调用。
      • @KirilKorov:不,sizeof 永远不能为零。但大多数编译器实际上不会为临时无数据对象使用任何存储空间,这符合“as-if”规则。
      • 我要补充一点,(1)分配(很可能)不会消耗任何 CPU 时间,因为在分配/解除分配期间没有执行任何实际操作(编译器只是在堆栈帧)和(2)理论上,即使分配(内存预留)也可能由于“好像规则”而被优化
      • @KirilKirov 感谢有关 sizeof 的信息,不知道。
      • 这是对的,但更奇怪的是:在语法上,你不能自己调用​​构造函数。您只能创建对象,并且在创建对象后,构造函数将自动被调用。
      猜你喜欢
      • 1970-01-01
      • 2018-07-06
      • 2019-07-25
      • 1970-01-01
      • 2012-11-06
      • 1970-01-01
      • 2011-06-29
      • 1970-01-01
      相关资源
      最近更新 更多