我有一个关于“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 );
}
};
以这种方式使用“这个”一般是不好的做法吗?
感谢您的帮助。
答案 0 :(得分:9)
不,这没有什么不妥,只要你小心所有权和删除。
答案 1 :(得分:2)
如果您可以引入boost,最好使用boost::shared_ptr
而不是直接指针,因为您将无需以正确的顺序手动释放内存。并且你将消除悬挂指针指向已经释放的内存的机会。
然后您可以使用shared_from_this()
代替this
。它将创建一个共享指针,而不是您的类型的直接指针。您的B类型来自enable_shared_from_this
。
您的类型A
会包含boost::shared_ptr<B>
的向量,而不是直接指针。