我应该如何避免将“this”指针与智能指针一起使用?是否有任何设计模式/一般建议来解决这个问题?
我假设将两者结合起来是不行的,因为:
- 您将本机指针传递给智能指针管理的对象,这首先破坏了使用智能指针的意义,
- 如果您在使用时将“this”指针包装在智能指针中,例如“return CSmartPtr(this);”,则您已经有效地设置了多个智能指针来管理同一个对象,因此第一个引用计数为零的指针将从另一方下方摧毁该物体,或
- 如果您有一个保存 CSmartPtr(this) 值的成员变量在这些情况下返回,它最终将是一个循环引用,导致引用计数始终为 1。
为了提供一些背景信息,我最近了解了将 STL 容器与对象组合的负面影响(重复浅拷贝、使用基类容器时的切片等),因此我将代码中的一些用法替换为指向对象的智能指针。一些对象使用“this”指针传递对自身的引用,这就是我卡住的地方。
我发现智能指针+“this”被认为是有害的?问了一个有点类似的问题,但答案没有用,因为我没有使用 Boost。
编辑:我一直在做的一个(非常做作的)例子是
...::AddToProcessingList(vector<CSmartPtr> &vecPtrs)
{
vecPtrs.push_back(CSmartPtr(this));
}