使用成员变量引用自己的实例

时间:2013-12-21 11:21:12

标签: c++ c++11

我目前正在研究一个不是我编写的C ++库代码。 代码对我来说似乎有点难看,但我必须管理员,我不是C ++专业人士。

库有一个类,我们称之为ExampleClass,它有一个成员变量std::shared_ptr<ExampleClass> this_ec,它没有在构造函数中设置,但似乎总是在另一个对象创建{的实例时设置{1}}:

ExampleClass

这可能是用于防止垃圾收集吗?

1 个答案:

答案 0 :(得分:4)

  

这可能是用于防止垃圾收集吗?

是的,如果通过&#34;垃圾收集&#34;,则表示&#34;自动删除&#34;。只要存在至少一个共享指针,就不会删除该对象,因此这将使对象保持活动状态,至少在该指针被重置或重新分配之前。

这相当违背了使用智能指针的目的,因为它现在很容易通过丢失所有外部指针来泄漏对象。仔细踩在这里。

在类中提供当前对象的共享指针的一种不易出错的方法是从enable_shared_from_this<ExampleClass>继承,并获取带有shared_from_this()的指针。这有效地存储了一个指针,它不会阻止删除。