2013-11-15 3 views
1
Object* a = new Object(); 

Object* b = a; 

Есть ли способ в классе Object знать, что произошло «b = a»? Я попытался перегрузить оператора =, но он, похоже, не срабатывал.C++ установка указателя на другой указатель

+1

Почему бы просто не использовать 'std :: shared_ptr'? –

+0

Потому что я просто играю с этой идеей и задаюсь вопросом, сообщил ли мне C++ об этой операции. – user441521

ответ

5

Вы перегрузили оператора для объекта не для объекта *. Вы не можете перегружать операторов для примитивных указателей.

Вам необходимо написать обертку, которая имитирует указатели, но отслеживает операции. Возможно, вы ищете умный указатель, такой как shared_ptr? Он реализует подсчет ссылок, как кажется, вы пытаетесь сделать.

+0

Bummer. Я ищу умный указатель, но мне не нравятся указатели обмотки, поэтому он играл с возможными альтернативами. Так что нет способа узнать, когда один указатель настроен на другого? Это отстой. Благодарю. – user441521

+0

О, это действительно правда о том, что вы не можете перегрузить operator = для Object *? Я думал, что это возможно? – paulm

+0

@ user441521 Не реалистично. Обертка - ваш единственный разумный вариант. К счастью, оболочка может быть довольно прозрачной, так как * и -> можно перегрузить, чтобы действовать на обернутый указатель. – Corbin

0

Действительно ли это то, что вы хотите сделать?

Мне кажется, что вы хотите скопировать значение a в b?

т.е:

Object* b = *a; 

В противном случае вы просто установка б указать а. Вам придется перегрузить operator = для Object *, а не operator = как часть объекта Object для объекта const &. Если вы действительно не хотите копировать указатель, в этом случае то, что у вас есть, в порядке.

Обратите внимание, что оператор перегрузки = для объекта * невозможен! Я сомневаюсь, что это на самом деле то, что вы действительно пытаетесь сделать в любом случае.

0

Я не думаю, что это вызовет конструктор копирования класса Object или использует оператор '=' класса Object. Это просто назначение между двумя указателями объекта. Таким образом, даже вы перегрузили оператор Object = = ', который не вызывается в этом случае, вы ничего не получили.

Смежные вопросы