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

Object* b = a; 

在Object类中是否有方法知道'b = a'发生了?我试图重载运算符=但它似乎没有启动。C++设置指针指向另一个指针

+1

为什么不使用'std :: shared_ptr'? –

+0

因为我只是玩弄这个想法,并想知道如果C++通知我这种操作发生。 – user441521

回答

5

您重载了Object的操作符而不是Object *。对于原始指针,您不能重载操作符。

您将需要编写一个模拟指针但跟踪操作的包装器。也许你正在寻找一个像shared_ptr一样的智能指针?它实现了引用计数,就好像你正在尝试做的那样。

+0

无赖。我正在寻找一个聪明的指针,但我不喜欢包装指针,所以玩的可能替代品。所以没办法知道什么时候一个指针被设置为另一个吧?这很糟糕。谢谢。 – user441521

+0

哦,是真的不能够重载operator = for Object *?我认为这是可能的? – paulm

+0

@ user441521不现实。包装是你唯一合理的选择。幸运的是,包装可以相当透明,因为*和 - >可以被重载以作用于被包装的指针。 – Corbin

0

这真的是你想要做的吗?

对我来说,你想复制一个值为b?

即:

Object* b = *a; 

否则你只是设置b指向一个。你必须重载operator = for Object *而不是operator =作为const Object的对象的一部分&。除非你真的想复制指针,在这种情况下,你有什么好的。

请注意,重载operator = for Object *显然是不可能的!我怀疑这实际上是你真正想要做什么的地方。

0

我不认为这将调用Object类的拷贝构造函数或使用Object类的'='运算符。这只是Object的两个指针之间的赋值。所以,即使你已经重载了Object的'='操作符,在这种情况下这个操作符不会被调用,但是你什么也没有被触发。