DO NOT!
Единственный способ минимизировать ошибки указателя - использовать правильный тип указателя. И это типов , множественное число.
Общие указатели не являются серебряной пулей. Они становятся утечками памяти, как только у вас появляются циклические ссылки (и если вы планируете использовать их везде , они появятся довольно быстро)
Если вы хотите безошибочные приложения C ++, вы должны работать для этого. Вы должны понимать свою заявку. Вы должны понимать семантику владения различными объектами. Общие указатели просто дают вам совместное владение, что, как правило, является достойным наименьшим знаменателем. Все остальное может быть заменено общим владением, и это будет работать, вроде.
Но по умолчанию используется объект, принадлежащий одному другому объекту. Он принадлежит функции и должен быть уничтожен, когда эта функция вернется, или он принадлежит классу, или как угодно еще. Часто вам не нужны указатели вообще. объект хранится по значению в std::vector
, возможно. Или это просто локальная переменная или член класса. Если является указателем, его часто лучше выразить как scoped_ptr
или, возможно, тот, который разрешает передачу права собственности (unique_ptr
или auto_ptr
).
shared_ptr
- это то, к чему вы можете прибегнуть, когда не можете дать никаких гарантий относительно срока службы или владения объектом. Но когда вы используете это, вам также нужно использовать weak_ptr
для прерывания циклов.
Действительно, лучший подход состоит в том, чтобы избегать указателей как можно больше. Когда вам do нужен указатель, используйте тот, который имеет максимально возможную семантику владения (предпочитайте scoped_ptr
, который вообще не допускает передачи владения, затем, если вам это нужно, используйте один что позволяет вам переносить владение, например unique_ptr
, и только в качестве крайней меры следует использовать shared_ptr
, что позволяет свободно делиться собственностью между любым количеством клиентов.
Нет волшебной палочки, которую вы можете помахать, чтобы ваш код на C ++ "просто работал". Единственный способ добиться этого - написать хороший твердый код на C ++. И вы делаете это, зная и используя имеющиеся в вашем распоряжении инструменты, а не притворяясь, что «эй, shared_ptr
- это как сборщик мусора, не так ли? если я использую это ".