我目前正在研究一个不是我编写的C ++库代码。 代码对我来说似乎有点难看,但我必须管理员,我不是C ++专业人士。
库有一个类,我们称之为ExampleClass
,它有一个成员变量std::shared_ptr<ExampleClass> this_ec
,它没有在构造函数中设置,但似乎总是在另一个对象创建{的实例时设置{1}}:
ExampleClass
这可能是用于防止垃圾收集吗?
答案 0 :(得分:4)
这可能是用于防止垃圾收集吗?
是的,如果通过&#34;垃圾收集&#34;,则表示&#34;自动删除&#34;。只要存在至少一个共享指针,就不会删除该对象,因此这将使对象保持活动状态,至少在该指针被重置或重新分配之前。
这相当违背了使用智能指针的目的,因为它现在很容易通过丢失所有外部指针来泄漏对象。仔细踩在这里。
在类中提供当前对象的共享指针的一种不易出错的方法是从enable_shared_from_this<ExampleClass>
继承,并获取带有shared_from_this()
的指针。这有效地存储了一个弱指针,它不会阻止删除。