一般的な質問がありますが、それはコンパイラ固有のものかもしれません。コンストラクターが呼び出される条件に興味があります。具体的には、速度が最適化されたリリースモード/ビルドでは、オブジェクトをインスタンス化するときに、コンパイラによって生成されたコンストラクタまたは空のコンストラクタが常に呼び出されますか?
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?
}
私は多くの検索を行い、VisualStudioで生成されたアセンブリコードを調べるのに時間を費やしました。ただし、リリースビルドでフォローするのは難しい場合があります。
要約:コンストラクターは常に呼び出されますか?もしそうなら、なぜですか?
これはコンパイラに大きく依存することは理解していますが、確かに共通のスタンスがあります。あなたが引用できるどんな例/情報源も本当にありがたいです。