2010-06-22 66 views
4

我有一個關於「this」用法的問題。這個指針的用法

假設我有兩個類A & B;他們的粗略輪廓如下:

class A 
{ 
public: 
    ... 
    void AddB(B* b) 
    { 
     // inserts B into the vector v 
    } 

private: 
    std::vector<B*> v; 
}; 

class B 
{ 
public: 
    ... 

    void foo(void) 
    { 
     ... 

     // Adds itself to the queue held in A 
     a.AddB(this); 
    } 
}; 

正在使用「這個」這種方式普遍不好的做法?

謝謝你的幫助。

回答

9

不,這沒什麼錯,只要你對所有權和刪除保持謹慎。

+1

我可能會建議使用'shared_ptr'或類似的東西,如果你的所有權語義不包括週期,也是非平凡的。 – Omnifarious 2010-06-22 20:04:17

+1

同意。這裏的終身管理是棘手的部分。 – 2010-06-22 20:05:21

+1

對'this'使用'shared_ptr'不是微不足道的。 – 2010-06-22 20:05:47

2

如果您可以引入boost,最好使用boost::shared_ptr而不是直接指針,因爲您不需要以正確的順序手動釋放內存。而且你將消除指向已釋放內存的指針的可能性。您可以使用shared_from_this()而不是this。它將創建一個共享指針,而不是您的類型的直接指針。您的B型將從enable_shared_from_this派生。

您的類型A將保留向量boost::shared_ptr<B>而不是直接指針。

Here's an example