"Идиомы и стили С++" - читать интересную книгу автора (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!!! "Матрицу" видели?