2013-11-15 65 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的'='操作符,在這種情況下這個操作符不會被調用,但是你什麼也沒有被觸發。