2011-04-07 61 views
1

我有一個程序做這樣的事情可能舉行以下:刪除在兩個不同的地方

class SomeObject{} 
{ 
    void function(int x, int y); 
    void function(SomeOtherObject *z); 

    SomeOtherObject *ptrToObj; 
} 

SomeObject::function(int x, int y) 
{ 
    ptrToObj = new SomeOtherObject(x, y); 
} 

SomeObject::function(SomeOtherObject *z) 
{ 
    ptrToObj = z; 
} 

我的問題是,我不知道要處理刪除,當我想新的目標的最佳途徑擺脫或初始化SomeObject的一個實例,因爲我不能指望它實際上是由SomeObject創建的。 (經理正在處理刪除,如果SomeObject傳遞指針)

選項我想到:

  • 複製對象,並指向。 (似乎有兩個副本,但對象不是大,大)
  • 做一個布爾值,如果該對象需要刪除設置的對象。 (這只是有點怪異和黑客)
  • 使另一個指針保存由SomeObject創建的對象,指向ptrToObj而不是指定它時。 (所以基本上,你知道第二個指針可以安全地刪除,如果它不是NULL)
  • 實現一個ref-counting指針。 (這是比我想要的更多一點)

我做了第三個,但我知道必須有更好的方法來處理這個問題!

+1

'boost :: shared_ptr' – Erik 2011-04-07 17:44:18

回答

2

使用shared_ptr,或者the one from Boost或最近的C++(0x)庫中的一個。 shared_ptr爲您做了參考計數。

0

這種情況可以通過shared_ptr來解決,如前所述,但我建議您閱讀關於其他策略的智能指針。我在技術和使用它們的案例上找到了一個有趣的summary

0

如果你不想使用智能指針看觀察者DP。

相關問題