传递shared_ptr即 shared_from_this() 作为空*
pass shared_ptr i.e. shared_from_this() as a void*
在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*
。
相关文章:
- 表示"accepting anything for this template argument" C++概念的通配符
- 为什么使用 "this" 指针调用派生成员函数?
- C++错误:"error: int aaa::bbb is protected within this context"
- 我可以将调用类的"this"传递给 lambda 函数吗?
- 创建具有 new in 函数和"this is nullptr"异常的对象
- 关于C++中具有多重继承"this"指针的说明
- 在noexcept 规范中是否允许使用"this"?
- 如何修复"error: ‘_1’ was not declared in this scope"?
- C++调用具有 *this 属性的单个帮助程序函数
- Doees the 'this' 指针参与虚函数的多态行为
- 在 c++ 中正确定义"this"关键字?
- 在什么情况下,两个堆栈分配的结构对象的 this 点指向同一个地址?
- "Unable to start debugging. No process is associated with this object." - 在Visual Studio Code中使用GDB
- QObject::连接无法将信号连接到*this*对象的插槽
- 析构函数中的"delete this"
- 为什么成员函数内的"this"指针为空?
- 为什么我需要在转换构造函数上引用 this->?
- "this"指针的值在对象的生存期内是否恒定?
- 引用 std::shared:ptr 以避免引用计数
- C++ "Invalid use of 'this' in non-member function" ,