Object* a = new Object();
Object* b = a;
Есть ли способ в классе Object знать, что произошло «b = a»? Я попытался перегрузить оператора =, но он, похоже, не срабатывал.C++ установка указателя на другой указатель
Object* a = new Object();
Object* b = a;
Есть ли способ в классе Object знать, что произошло «b = a»? Я попытался перегрузить оператора =, но он, похоже, не срабатывал.C++ установка указателя на другой указатель
Вы перегрузили оператора для объекта не для объекта *. Вы не можете перегружать операторов для примитивных указателей.
Вам необходимо написать обертку, которая имитирует указатели, но отслеживает операции. Возможно, вы ищете умный указатель, такой как shared_ptr? Он реализует подсчет ссылок, как кажется, вы пытаетесь сделать.
Bummer. Я ищу умный указатель, но мне не нравятся указатели обмотки, поэтому он играл с возможными альтернативами. Так что нет способа узнать, когда один указатель настроен на другого? Это отстой. Благодарю. – user441521
О, это действительно правда о том, что вы не можете перегрузить operator = для Object *? Я думал, что это возможно? – paulm
@ user441521 Не реалистично. Обертка - ваш единственный разумный вариант. К счастью, оболочка может быть довольно прозрачной, так как * и -> можно перегрузить, чтобы действовать на обернутый указатель. – Corbin
Действительно ли это то, что вы хотите сделать?
Мне кажется, что вы хотите скопировать значение a в b?
т.е:
Object* b = *a;
В противном случае вы просто установка б указать а. Вам придется перегрузить operator = для Object *, а не operator = как часть объекта Object для объекта const &. Если вы действительно не хотите копировать указатель, в этом случае то, что у вас есть, в порядке.
Обратите внимание, что оператор перегрузки = для объекта * невозможен! Я сомневаюсь, что это на самом деле то, что вы действительно пытаетесь сделать в любом случае.
Я не думаю, что это вызовет конструктор копирования класса Object или использует оператор '=' класса Object. Это просто назначение между двумя указателями объекта. Таким образом, даже вы перегрузили оператор Object = = ', который не вызывается в этом случае, вы ничего не получили.
Почему бы просто не использовать 'std :: shared_ptr'? –
Потому что я просто играю с этой идеей и задаюсь вопросом, сообщил ли мне C++ об этой операции. – user441521