【发布时间】:2009-09-01 23:49:39
【问题描述】:
我应该如何避免将“this”指针与智能指针一起使用?是否有任何设计模式/一般性建议来解决这个问题?
我假设将两者结合起来是不行的,因为:
- 您将本机指针传递给智能指针管理的对象,这首先破坏了使用智能指针的意义,
- 如果在使用时将“this”指针包装在智能指针中,例如“return CSmartPtr(this);”,您已经有效地设置了多个智能指针来管理同一个对象,因此第一个引用计数为零的指针将从另一个对象下方销毁该对象,或者
- 如果您有一个保存 CSmartPtr(this) 值的成员变量在这些情况下返回,它最终将是一个循环引用,导致引用计数始终为 1。
为了提供一些背景信息,我最近了解了将 STL 容器与对象组合的负面影响(重复浅拷贝、使用基类容器时的切片等),因此我将在我的代码带有指向对象的智能指针。一些对象使用“this”指针传递对自身的引用,这就是我卡住的地方。
我发现smart pointers + “this” considered harmful? 被问到一个有点类似的问题,但答案没有用,因为我没有使用 Boost。
编辑:我一直在做的一个(非常做作的)示例是
...::AddToProcessingList(vector<CSmartPtr> &vecPtrs)
{
vecPtrs.push_back(CSmartPtr(this));
}
【问题讨论】:
-
您能否提供示例代码来证明您正在尝试做什么?
-
我添加了一个人为的例子。我发现很难用代码 sn-p 来描述,但我尽力了。显然,这段代码不是最优的,它旨在最清楚地展示问题。
标签: c++ stl smart-pointers