2013-09-19 3 views
10

Что именно происходит в коде ниже.Вызов конструктора без создания объекта

#include<iostream.h> 

class Demo 
{ 
    public : 

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

void main() { 
    Demo(); 
} 

Demo() просто вызывает конструктор и деструктор. Создается ли объект в этом процессе? И, таким образом, выделяется память?

ответ

17

Вы явно не вызываете конструктор, вместо этого этот код создает временный неназванный объект с типом Demo, который уничтожается сразу после ;.

Да, память выделяется (автоматически, в стеке) для этого временного объекта и освобождается (снова автоматически) после ;. Между тем, конструктор и деструктор называются, как и ожидалось.

+0

Начать придирчивость: в этом примере объект не имеет каких-либо членов, и наследование не задействовано. Поэтому объект не требует места в стеке. По крайней мере, любой здравомыслящий компилятор оптимизирует это для простого вызова функции. –

+0

@PhilippAumayr - вы имеете в виду, что 'sizeof (Demo)' равно нулю ('0')? –

+0

@PhilippAumayr по крайней мере, если нет виртуальной таблицы (rtti disabled) – bkausbk

0

Да, память выделена, но в стеке, а Demo() создает временный объект, который автоматически разрушается.

+5

Вы благодарите себя? – RedX

Смежные вопросы