我对C ++中的this
指针有疑问。
如果我创建一个指针,
std::shared_ptr<SomeClass> instance_1;
this
的{{1}}指针是否也是共享指针?
我问这个问题的原因是,如果我使用指针instance_1
在其方法中启动另一个线程。它会复制this
吗?
答案 0 :(得分:3)
this
的{{1}}指针是否也是共享指针?
没有。 instance_1
指针是指向对象当前实例的指针,在这种情况下它指向与共享指针相同的共享对象。但它本身不是this
。它的类型为shared_ptr
。
我问这个问题的原因是......
要从SomeClass*
创建shared_ptr
,this
必须从std::enable_shared_from_this
派生。然后你可以使用;
的所有权
SomeClass
;返回shared_from_this()
,其共享shared_ptr
在线程之间共享这样的状态时,请注意竞争条件和锁定问题等。
答案 1 :(得分:2)
不,你不能让this
成为共享指针。最近的事情是继承std::enable_shared_from_this
并通过调用获取共享指针:
this->shared_from_this();
详情可以找到here
另一种选择是使用侵入式共享指针,如boost::intrusive_ptr
,其中this
虽然不会是共享指针,但可以转换为一个。
答案 2 :(得分:2)
没有。创建指向对象的共享指针不会使对象中的this
成为共享指针。
如果您想从this
获取共享指针,您可能至少要考虑使用std::enable_shared_from_this
。
答案 3 :(得分:0)
不,this
始终是原始指针。如果您希望另一个线程拥有shared_ptr的副本,则必须为其提供instance_1
。