Страницы

Поиск по вопросам

среда, 12 декабря 2018 г.

Подсчет ссылок в C++

Как реализовать подсчет ссылок при создании собственного класса C++?
То есть нужен счетчик, который хранил бы количество ссылок, ссылающихся на объект. Если этот счетчик равен нулю, то объект необходимо удалить. Хочется разобраться в этом, но не имею ни малейшей мысли как это реализовать.


Ответ

Простейший вариант - примерно так (это набросок, не более того):
class CountedPtr { ... Type1 p1; // Данные Type2 p2; // Данные .... int * cnt; // Счетчик
В конструкторе - помимо прочего -
cnt = new int(1);
В копирующем конструкторе - cnt копируется и увеличивается на 1. Соответственно обрабатывается присваивание (проще всего его реализовать через идиому обмена с копией). В деструкторе - что-то типа
if (--*cnt == 0) { delete ptr; delete cnt; }
Для начала (и понимания азов) хватит?

Комментариев нет:

Отправить комментарий