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

Can pointer 'this' be a shared pointer?

我对 C++ 中的 this 指针有疑问。

如果我创建一个指针,

std::shared_ptr<SomeClass> instance_1;

instance_1this指针也是共享指针吗?

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

不,this 始终是原始指针。如果您想让另一个线程拥有 shared_ptr 的副本,您将必须给它 instance_1.

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

this->shared_from_this();

详情可见here

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

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

如果您想从 this 获取共享指针,您可能至少要考虑使用 std::enable_shared_from_this

Is the this pointer of instance_1 also a shared pointer?

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

The reason I ask this question is...

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

shared_from_this(); returns a shared_ptr which shares ownership of *this

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