指针'this'可以是共享指针吗?

Can pointer 'this' be a shared pointer?

本文关键字:指针 共享 this      更新时间:2023-10-16

我有一个关于C++中this指针的问题。

如果我创建一个指针,

std::shared_ptr<SomeClass> instance_1;

instance_1this指针也是共享指针吗?

我问这个问题的原因是,如果我使用指针 this 在其方法中启动另一个线程.它会复制shared_ptr吗?

instance_1this指针也是共享指针吗?

不。this指针是指向对象的当前实例的指针,在本例中,它指向与共享指针相同的共享对象。但它本身不是shared_ptr.它是类型 SomeClass* .

我问这个问题的原因是...

要从 this 创建shared_ptrSomeClass必须从 std::enable_shared_from_this 派生。然后你可以使用;

shared_from_this() ; 返回共享*this所有权的shared_ptr

在线程之间共享这样的状态时,请注意竞争条件和锁定问题等。

No.创建指向对象的共享指针不会使对象中的this成为共享指针。

如果要从 this 获取共享指针,则至少需要考虑使用 std::enable_shared_from_this

不,您不能this成为共享指针。最接近的事情是从std::enable_shared_from_this继承并通过调用来获取共享指针:

this->shared_from_this();

详细信息可以在这里找到

另一种选择是使用侵入式共享指针,例如boost::intrusive_ptr,其中this不会是共享指针,但可以转换为共享指针。

不,this始终是一个原始指针。 如果您希望另一个线程具有shared_ptr的副本,则必须将其instance_1