指针 'this' 可以是共享指针吗?
Can pointer 'this' be a shared pointer?
我对 C++ 中的 this
指针有疑问。
如果我创建一个指针,
std::shared_ptr<SomeClass> instance_1;
instance_1
的this
指针也是共享指针吗?
我问这个问题的原因是,如果我使用指针 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_ptr
,SomeClass
必须从 std::enable_shared_from_this
派生。然后你可以使用;
shared_from_this()
; returns a shared_ptr
which shares ownership of *this
在线程之间共享这样的状态时,请注意竞争条件和锁定问题等。
我对 C++ 中的 this
指针有疑问。
如果我创建一个指针,
std::shared_ptr<SomeClass> instance_1;
instance_1
的this
指针也是共享指针吗?
我问这个问题的原因是,如果我使用指针 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 ofinstance_1
also a shared pointer?
没有。 this
指针是指向对象当前实例的指针,在本例中它指向与共享指针相同的共享对象。但它本身并不是shared_ptr
。它的类型是 SomeClass*
。
The reason I ask this question is...
要从 this
创建 shared_ptr
,SomeClass
必须从 std::enable_shared_from_this
派生。然后你可以使用;
shared_from_this()
; returns ashared_ptr
which shares ownership of*this
在线程之间共享这样的状态时,请注意竞争条件和锁定问题等。