我有一个一般性的问题,可能是特定于编译器的。我对调用构造函数的条件感兴趣。具体来说,在针对 speed 优化的发布模式/构建中,在实例化对象时是否总是会调用编译器生成的构造函数或空构造函数?
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 中查看生成的汇编代码。不过,在发布版本中可能很难遵循。
总结:构造函数总是被调用吗?如果是这样,为什么?
我知道这在很大程度上取决于编译器,但肯定有一个共同的立场。您可以引用的任何示例/资源将不胜感激。