Смысл конструктора в том, что после его завершения все переменные-члены определены правильно. В этом случае NULL является допустимым начальным значением.
Вызов delete на NULL четко определен.
Более обычно, хотя вы ожидаете, что конструктор определит значение указателя RAW. Кроме того, поскольку ваш объект содержит указатель RAW и, очевидно, владеет им (он удаляет его, это подразумевает владение), вы ДОЛЖНЫ также удостовериться, что вы переопределяете сгенерированные компилятором версии Copy Constructor и Assignment Operator.
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 <>, если вы действительно не хотите сделать объект копируемым.