传递shared_ptr即 shared_from_this() 作为空*

pass shared_ptr i.e. shared_from_this() as a void*

本文关键字:shared this ptr from 传递      更新时间:2023-10-16

在C++类中,我尝试使用shared_ptr,但我尝试使用shared_from_this(),而不是使用this。 在构造函数中,我正在尝试创建一个需要void*的结构的对象。 我不确定如何将shared_ptr转换为可以作为参数传递给期望void*的结构的void*

回调.cpp

struct CObj{
int val;
void* context;    
};
class A : std::enable_shared_from_this<A>{
private:
Cobj mCobj;
public:
A(){
mCobj = (CObj){5, shared_from_this()};
}
~A(){
}
Cobj getObjref(){
return mCObj;
}
};
std::shared_ptr p = std::shared_ptr<A>(new A);
Cobj  invokeCfunc = p->getObjref();

您不能在构造器中调用shared_from_this。你也不需要,因为你想要的是void*.this隐式转换为void*。您首先不需要访问共享指针。

这很简单:

A(): mCobj{5, this} {

请注意,如果您创建A的副本,则该副本将指向从中复制的对象。考虑这是否是您想要的,如果不是,则更改复制和移动构造函数和赋值运算符,使其按照您希望它们的行为方式运行。

我不确定如何将shared_ptr转换为void *

您可以使用成员函数get。生成的指针隐式转换为void*