Всегда ли вызываются пустые конструкторы в C ++?

У меня есть общий вопрос, который может быть немного специфичным для компилятора. Меня интересуют условия, при которых будет вызываться конструктор. В частности, в режиме выпуска / сборках, оптимизированных для скорости , всегда ли будет вызываться пустой конструктор, созданный компилятором, когда вы создаете экземпляр объекта?

class NoConstructor  
{  
    int member;  
};  

class EmptyConstructor  
{  
    int member;  
};

class InitConstructor  
{  
    InitConstructor()  
        : member(3)   
    {}  
    int member;  
};

int main(int argc, _TCHAR* argv[])  
{  
    NoConstructor* nc = new NoConstructor(); //will this call the generated constructor?  
    EmptyConstructor* ec = new EmptyConstructor(); //will this call the empty constructor?  
    InitConstructor* ic = new InitConstructor(); //this will call the defined constructor  

    EmptyConstructor* ecArray = new EmptyConstructor[100]; //is this any different?
}

Я провел много поисков и потратил некоторое время просмотр сгенерированного кода сборки в Visual Studio. Тем не менее, это может быть затруднительно в сборках релизов.

В итоге: Всегда ли вызывается конструктор? Если да, то почему?

Я понимаю, что это будет во многом зависеть от компилятора, но, безусловно, есть общая позиция. Мы будем очень признательны за любые примеры / источники, которые вы можете процитировать.

7
задан Cody Gray 24 February 2011 в 05:01
поделиться