コンストラクターの要点は、完了後にすべてのメンバー変数が正しく定義されることです。この場合、NULL が有効な初期値です。
NULL での削除の呼び出しは明確に定義されています。
通常は、コンストラクターが RAW ポインターの値を定義することを期待します。また、オブジェクトには RAW ポインターが含まれており、明らかにそれを所有しているため (それを削除しているため、これは所有権を意味します)、コピー コンストラクターと代入演算子のコンパイラ生成バージョンをオーバーライドすることも確認する必要があります。
class MyClass
{
public:
MyClass()
:pointer(NULL) // valid value.
{}
~MyClass()
{
delete pointer; // This is fine.
}
void initializePointer() // Missing return type
{
pointer = new OtherClass();
}
private:
MyClass(MyClass const& copy); // If you don't define these
MyClass& operator=(MyClass const& copy);// two the compiler generated ones
// will do nasty things with owned
// RAW pointers.
OtherClass* pointer;
};
または、標準のスマート ポインターのいずれかを使用できます。オブジェクトを本当にコピー可能にしたい場合を除き、おそらく std::auto_ptr<> です。