Если вы уже переписываете свой код для использования умных указателей, то вам следует пройти весь путь и удалить обычные / необработанные указатели, где это возможно.
Умные указатели не используют магию для отслеживания своего содержимого (как это делает сборщик мусора), но они используют довольно простую эвристику, чтобы определить, должен ли объект, которым они управляют, быть освобожден или нет. Неправильное использование умных указателей может легко сломать эту эвристику.
Например, shared_ptr
отслеживает все сделанные копии (прямо или косвенно как копии из копий) и уничтожает контролируемый объект при уничтожении последней копии.
Это ужасно ломается, если вам удается создать два shared_ptr
, которые оба управляют одним и тем же объектом, но где один не является копией другого.