2010-06-22 62 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