Я советую возвращаться std::tr1::shared_ptr
(или boost::shared_ptr
, если Ваша реализация C++ не имеет TR1) вместо необработанного указателя. Так, вместо того, чтобы использовать Animal*
, используйте std::tr1::shared_ptr<Animal>
вместо этого.
Общие указатели обрабатывают ссылочное отслеживание для Вас и удаляют объект автоматически, при отсутствии ссылок, оставленных ему.
Вот обзор - Обзор лучшего программного обеспечения для электронного маркетинга с открытым исходным кодом .