Версии, сгенерированные компилятором, работают в большинстве ситуаций.
Вам нужно немного подумать о проблеме, когда ваш объект содержит указатель RAW (аргумент за отсутствие указателей RAW). Итак, у вас есть указатель RAW, второй вопрос: владеете ли вы указателем (он был удален вами)? Если это так, то вам нужно будет применить правило 4.
Владение более чем 1 указателем RAW становится все труднее сделать правильно (увеличение сложности также не является линейным [но это наблюдение, и у меня нет реальной статистики, подтверждающей это утверждение]). Поэтому, если у вас есть более 1 RAW-указателя, подумайте о том, чтобы обернуть каждый в свой класс (в некоторой форме, умный указатель).
Правило 4: если объект является владельцем указателя RAW, вам нужно определить следующие 4 члена, чтобы убедиться, что вы правильно обрабатываете управление памятью:
- 1010 * Конструктор *
- Конструктор копирования
- Оператор присваивания
- Destructor
Как вы их определите, будет зависеть от ситуаций. Но стоит остерегаться:
- Конструкция по умолчанию: установить указатель на NULL
- Конструктор копирования: используйте идеал «Копировать и поменять», чтобы предоставить «Сильную гарантию исключения»
- Оператор присваивания: проверка присвоения себе
- Деструктор: защита от исключений, распространяющихся из деструктора.