指针'this'可以是共享指针吗?
Can pointer 'this' be a shared pointer?
我有一个关于C++中this
指针的问题。
如果我创建一个指针,
std::shared_ptr<SomeClass> instance_1;
instance_1
的this
指针也是共享指针吗?
我问这个问题的原因是,如果我使用指针 this
在其方法中启动另一个线程.它会复制shared_ptr
吗?
instance_1
的this
指针也是共享指针吗?
不。this
指针是指向对象的当前实例的指针,在本例中,它指向与共享指针相同的共享对象。但它本身不是shared_ptr
.它是类型 SomeClass*
.
我问这个问题的原因是...
要从 this
创建shared_ptr
,SomeClass
必须从 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
相关文章:
- 如何从具有移动语义的类对象中生成共享指针
- 使用共享指针的函数调用,其对象应为 const
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 如何访问由共享指针保存的类方法?
- 从矢量或地图中删除共享指针
- 使用共享指针时,从共享指针本身释放内存的机制是什么
- 使用共享指针实现复制 c'tor?
- C++/QT:使用指向私有成员的常量指针作为只读数据共享
- 共享指针继承,而不先显式强制转换
- 如何检查类中共享指针的有效性?
- 共享 C++ 的数据成员指针
- std::排序在共享指针的向量上
- 将相同共享指针的副本存储在不同的向量中是否是一种好的做法?
- 在什么情况下,需要共享智能指针而无法使用唯一指针?
- 嵌套类、继承和C++中的共享指针
- <Base> <Derived> 具有相同原始指针共享引用的 shared_ptr 和 shared_ptr 实例是否计数?
- 重载流<<运算符,用于指针/共享指针和其他类型的
- RAW指针共享_ptr
- 指针共享习语
- 将memmove函数与临时指针共享相同的地址