Думаю, что вы ищете std::shared_ptr
или параллельное решение; std::shared_ptr
используется для разделения указателей на один объект, который уничтожается только после того, как все общих указателей очищены. Таким образом, хотя у нас все еще есть ссылка на объект, она остается действительной.
Даже если вы не собираетесь использовать shared_ptr
, идея заключается в использовании счетчика ссылок , который используется всеми объектами, которые относятся к одному и тому же ресурсу - каждый раз, когда вы вызываете конструктор / конструктор копирования / присваивание копии, вы увеличиваете общий счетчик на 1, а в деструкторе вы уменьшаете его на 1, и если ( и только если ) он достигает 0, вы освобождаете базовый ресурс.
Кроме того, для полноты ответа я должен добавить это для std::shared_ptr
, там кроме того, std::weak_ptr
, что означает доступ без совместного владения - он позволяет получить доступ к ресурсу, удерживаемому std::shared_ptr
, пока он жив , но может быть сброшен автоматически, если все std::shared_ptr
, относящиеся к ресурсу, уничтожаются. Его редко можно увидеть, но, тем не менее, его можно использовать.