S. Lippman の「inside c++ object model」という本を読みましたが、そのようなコードはありますか
class Foo { public: int val; Foo *pnext; };
void foo_bar()
{
// Oops: program needs bar's members zeroed out
Foo bar;
Foo* baz = new Foo(); // this line i added myself
if ( bar.val || bar.pnext )
// ... do something
// ...
}
そして、「このコードフラグメントのデフォルトコンストラクターは合成されていません。
グローバル オブジェクトは、プログラムの起動時に関連付けられたメモリが「ゼロに設定」されることが保証されています。プログラム スタックに割り当てられたローカル オブジェクトとフリー ストアに割り当てられたヒープ オブジェクトは、関連付けられたメモリがゼロに設定されていません。むしろ、メモリは以前に使用された任意のビット パターンを保持します。」
このコードでは、baz オブジェクトがヒープ上に作成されました。上記の説明によると、このオブジェクトはグローバルではなく、既定のコンストラクターとは呼ばれません。私は正しく理解していますか?