Нулевые висячие указатели с ++ - PullRequest
1 голос
/ 22 сентября 2019

У меня есть указатель на абстрактный объект класса ptr1.Мне нужно создать еще один указатель с тем же адресом ptr2, чтобы при освобождении и обнулении указателя ptr1 значение ptr2 также становилось равным нулю.

SomeObject* ptr1 = new SomeObject();
SomeObject* ptr2 = ptr1;

delete ptr1;
ptr1 = nullptr; // after that ptr2 should be nullptr

Я знаю, что это проблема с висящими указателямии это можно решить с помощью умных указателей, но я хочу решить это без них.Заранее спасибо за помощь!

1 Ответ

2 голосов
/ 22 сентября 2019

Объявите ptr2 как ссылку или указатель на ptr1, т. Е. Одно из следующего:

SomeObject* &ptr2 = ptr1;
SomeObject** ptr2 = &ptr1;

Имея только один экземпляр указателя и убедитесь, что он только переданОбращаясь к ссылкам или указателям на экземпляр указателя, вы гарантируете, что не может существовать устаревших копий указателя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...