Основные шаги в два раза:
Во-первых, помните, что каждое новое требует удаления. Таким образом, когда вы используете новый оператор, повышайте свою осведомленность о том, что будет делать этот объект, как он будет использоваться и как будет управляться его время жизни.
Во-вторых, убедитесь, что вы никогда не перезаписываете указатель. Вы можете сделать это, используя класс умных указателей вместо необработанных указателей, но если вы действительно убедитесь, что никогда не используете его с неявным преобразованием. (пример: используя библиотеку MSXML, я создал умный указатель CCOMPtr для хранения узлов, чтобы получить узел, который вы вызываете методом get_Node, передавая адрес умного указателя - у которого был оператор преобразования, который возвращал базовый тип указателя. это означало, что если интеллектуальный указатель уже содержал данные, эти данные-члены будут перезаписаны, что приведет к утечке из предыдущего узла).
Я думаю, что в этих двух случаях вы можете потерять память. Если вы используете только интеллектуальный указатель напрямую - никогда не позволяя раскрыть его внутренние данные, вы защищены от последней проблемы. Если вы закроете весь свой код, который использует new и delete, в классе (то есть, используя RAII), то вы также будете в безопасности от первого.
Избежать утечек памяти в C ++ очень легко, если вы сделаете все выше.