Рассмотрим простой класс:
class MyInt {
public:
MyInt();
MyInt(const char *num);
};
Я хочу интегрировать шаблон дизайна подсчета ссылок в класс, что означает, что мне нужно отслеживать, сколько указателей указывают на экземпляр этого класса. Мне нужно реализовать его только в этом классе или создать другой класс и наследовать его.
Учитывая этот пример кода, я хочу очистить любую выделенную память программы:
int main() {
MyInt*a = new MyInt("10");
a = new MyInt("20");
delete a;
return 0;
}
Мои попытки
Я попытался oveloading оператора '=' и добавление элемента referenceCount:
MyInt &MyInt::operator=(const MyInt* right) {
MyInt*left = this;
*this = right;
left->referenceCount -= 1;
if (left->referenceCount == 0) {
delete (left);
}
return *this;
}
Но это не работает, потому что мы присваиваем указатель класса другому указателю.
Также пытался переопределить операторы new и delete, но, похоже, не может заставить его работать и отслеживать количество указателей на экземпляр.
Как мне кажется, мне нужно реализовать четыре вещи: конструктор копирования, оператор new, оператор delete и operator =.
Как эффективно отслеживать указатели и автоматически очищать неопознанную память?