(注意:あくまで C++ の言語規格 ISO 14882-2003 のみを想定します)
未初期化なメモリ領域を char 配列の自動変数として(スタック上に)確保し,その領域上に別の型のオブジェクトを構築するコードを考えてみる.
class MyClass { ..... }; int main() { char buf[sizeof(MyClass)]; MyClass *p = static_cast<MyClass *>(static_cast<void *>(buf)); ::new (p) MyClass(); ..... p->~MyClass(); }
あるいは,フリーストア(ヒープ)上に未初期化なメモリ領域を char の配列として確保し,その領域上に別の型のオブジェクトを構築するコードを考えてみる.
class MyClass { ..... }; int main() { MyClass *p = static_cast<void *>(::new char[sizeof(MyClass)]); ::new (p) MyClass(); ..... p->~MyClass(); delete[] p; }
上記2つのコード各々について,問題があればそれらを指摘せよ.また問題がある場合,それらを回避する方法が存在するか?