Делать какие-либо ссылки на классы по наследству? - PullRequest
0 голосов
/ 01 июля 2010

В моем новом проекте я хотел бы (в основном, чтобы увидеть, как это будет работать) полностью запретить необработанные указатели из моего кода.

Мой первый подход состоял в том, чтобы позволить всем классам наследовать от этого простого класса: шаблон класса Base {public: typedef std :: shared_ptr ptr;};

И просто используйте class :: ptr везде, где мне нужен указатель.

Этот подход казался подходящим, пока я не осознал, что иногда мои объекты хотят передать указатель this на другие объекты.Позволить моим объектам просто обернуть его в shared_ptr не будет с тех пор может быть два владельца для одного и того же указателя.Я предполагаю, что это плохо.

Моя следующая идея состояла в том, чтобы изменить класс 'Base' для реализации самого подсчета ссылок, поэтому каждый экземпляр классов, который наследуется от 'Base', может иметь только один счет.

Это хорошее решение, есть ли что-нибудь лучше и может ли оно повысить и / или stl уже решить эту проблему для меня?

1 Ответ

1 голос
/ 01 июля 2010

Возможно, вы захотите взглянуть на enable_shared_from_this .

В другой заметке, при использовании shared_ptr вам необходимо знать о возможности циклических ссылок.Чтобы избежать этого, вы можете использовать weak_ptr.Это означает, что вам понадобится какой-то способ различить их, поэтому просто иметь typedef class::ptr может быть недостаточно.

...