指针'这个'是一个共享指针?

时间:2016-06-02 17:37:09

标签: c++ multithreading shared-ptr smart-pointers reference-counting

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

如果我创建一个指针,

std::shared_ptr<SomeClass> instance_1;

this的{​​{1}}指针是否也是共享指针?

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

4 个答案:

答案 0 :(得分:3)

  

this的{​​{1}}指针是否也是共享指针?

没有。 instance_1指针是指向对象当前实例的指针,在这种情况下它指向与共享指针相同的共享对象。但它本身不是this。它的类型为shared_ptr

  

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

要从SomeClass*创建shared_ptrthis必须从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