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