Иногда, в мимолетные моменты, я думаю, что auto_ptr - это круто.Но большую часть времени я признаю, что есть намного более простые методы, которые делают это неуместным.Например, если я хочу автоматически освободить объект, даже если выдается исключение, я могу создать новый объект и назначить auto_ptr.Очень круто!Но я мог бы проще создать свой объект как локальную переменную и позволить стеку позаботиться об этом (дух!).
Таким образом, я не был слишком удивлен, когда нашел стандарты кодирования google C ++ запрет на использование auto_ptr.Google заявляет, что вместо этого следует использовать scoped_ptr (если требуется умный указатель).
Я хотел бы знать, может ли кто-либо, вопреки моему опыту, дать вескую причину (ы) того, когда auto_ptr является лучшая или самая простая вещь для использования.Если нет, то я полагаю, что я сам забаню его (следуя указаниям Google).
update : для тех, кто выразил обеспокоенность, нет, я не принимаю стандарты Google.Например, вопреки совету Google, я согласен, что обработка исключений должна быть активирована.Мне также нравится использовать макросы препроцессора, такие как printable enum , который я сделал.Меня поразила только тема auto_ptr.
update2 : Оказывается, мой ответ получен от двух респондентов, представленных ниже, и от заметки из Википедии .Во-первых, Херб Саттер действительно показал правильное использование (идиома источника-приемника и состав объекта, связанный с временем жизни).Во-вторых, есть магазины, в которых TR1 и boost недоступны или запрещены, и разрешен только C ++ 03.В-третьих, согласно Википедии, спецификация C ++ 0x осуждает auto_ptr и заменяет его на unique_ptr.Итак, мой ответ: используйте unique_ptr, если он доступен мне (на всех рассматриваемых платформах), иначе используйте auto_ptr для случаев, которые изображает Саттер.