У меня есть общий вопрос, который может быть немного специфичным для компилятора. Меня интересуют условия, при которых будет вызываться конструктор. В частности, в режиме выпуска / сборках, оптимизированных для скорости , всегда ли будет вызываться пустой конструктор, созданный компилятором, когда вы создаете экземпляр объекта?
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. Тем не менее, это может быть затруднительно в сборках релизов.
В итоге: Всегда ли вызывается конструктор? Если да, то почему?
Я понимаю, что это будет во многом зависеть от компилятора, но, безусловно, есть общая позиция. Мы будем очень признательны за любые примеры / источники, которые вы можете процитировать.