"Идиомы и стили С++" - читать интересную книгу автора (Makhmutov Albert)

1. Обработка обращения к NULL.

Заменяем реализацию оператора -› на:

T* operator-›() {

 if (!tObj) {

  cerr ‹‹ "NULL";

  tObj = new T;

 }

 return tObj;

}

или

T* operator-›() {

 if (!tObj) throw CError;

 return tObj;

};

Здесь CError класс исключения. Или втыкаем статический экземпляр-шпион.

private:

 T* tObj; // Это было;

 static T* spy; // Это добавлено

Ну и сам перегруженный оператор.

T* operator-›() {

 if (!tObj) return spy;

 return tObj;

};

Здесь нужно пояснить: spy совсем не обязательно класса T. Можно воткнуть производный, и переопределить его функции. Тогда он будет Вам докладывать о попытках обращения к NULL. Не забудьте его создать, инициализировать, и прицепить к указателю. А то вся идея на помойку. Вы пытаетесь отловить обращение к NULL, а там… NULL!!! "Матрицу" видели?