struct A { int m; }; // PODstruct B { ~B(); int m; }; // non-POD, compiler generated default ctorstruct C { C() : m() {}; ~C(); int m; }; // non-POD, default-initialising m
在c++ 98编译器中,应该发生以下情况:
new A -不确定的值
new A() - 0 -初始化
new B -默认构造(B::m未初始化)
new B() -默认构造(B::m未初始化)
new C -默认构造(C::m是零初始化的)
new C() -默认构造(C::m是零初始化的)
在c++ 03兼容的编译器中,事情应该这样工作:
new A -不确定的值
new A() - value-initialize A,这是零初始化,因为它是一个POD。
new B -默认初始化(保留B::m未初始化)
new B() - value- initializing B,它对所有字段进行零初始化,因为它的默认ctor是编译器生成的,而不是用户定义的。