Albert Makhmutov Идиомы и стили С++ Шаг 1 - Введение. Зачем все это надо и что это такое. Шаг 2 - Умные указатели. Шаг 3 - Как это применять. 1. Обработка обращения к NULL. 2. Отладка и трассировка. 3. Статистика классов и объектов. 4. Кэширование. Шаг 4 - О двойной диспетчеризации. Шаг 5 - Ведущие указатели (Master Pointers). Важные конструкторы. Шаг 6 - Ведущие указатели. Еще пара слов. Шаг 7 - Интерфейсы. Интерфейсные указатели. Шаг 8 - Еще раз о статистике класса. Шаг 9 - Множественные интерфейсные smart-указатели. Шаг 10 - Множественные интерфейсные указатели. Продолжение. Шаг 11 - Нетривиальное конструирование объектов. Шаг 12 - Двухэтапная инициализация. Шаг 13 - Перегрузка operator+. Шаг 14 - Двойная диспетчеризация. Продолжение. Шаг 15 - Как сделать массив из чего угодно. Массивы и оператор operator[]. Шаг 16 - Как сделать массив из чего угодно. Продолжение. Шаг 17 - Как НЕ создавать локальные переменные. Шаг 18 - Управление памятью. Шаг 19 - Управление памятью. Продолжение 1. Шаг 20 - Временные объекты. Неявные вызовы конструкторов и их подавление. Шаг 21 - О тщете сущего. Шаг 22 - Классы объектов, поддерживающие транзакции. Шаг 23 - Классы объектов, поддерживающие транзакции. Продолжение. Шаг 24 - Как создавать ТОЛЬКО локальные переменные. Шаг 25 - Как сделать виртуальной свободную функцию. Шаг 26 - Как сделать массив из чего угодно. Продолжение 2. Итераторы. Шаг 27 - Умные указатели. Перегрузка operator*, operator(),operator-›*. Шаг 28 - Классы объектов, поддерживающие транзакции. Продолжение 2. Шаг 29 - Единственный экземпляр класса - Одиночка или Singleton.
2. Отладка и трассировка. Ну это совсем банально. Выносим определение операторов за определение класса и ставим там точку останова. Чтобы не тормозило в релиз версии, окружаем слово inline ифдефами.
template ‹class T›
#ifndef DEBUG
inline
#endif
SmartPointer‹T›::operator T*()
{
return tObj;
}
template ‹class T›
#ifndef DEBUG
inline
#endif
T* SmartPointer‹T›::operator T-›()
{
return tObj;
}