在下面的代码中,我试图将void *转换为类型的shared_ptr:
squuezenet.cpkt
但是我得到下面的编译错误:
#include <iostream>
#include <memory>
class A
{
public:
A(){l=0;}
int l;
void Show() { std::cout << l << "\n";}
};
void PrintA(void *aptr)
{
std::shared_ptr<A> a1;
a1.reset(aptr);
a1->Show();
}
int main()
{
std::shared_ptr<A> a(new A());
PrintA(a.get());
}
如何将void指针转换为类型的共享指针?
答案 0 :(得分:4)
假设您无法更改PrintA
的声明,则您的PrintA
定义应类似于:
void PrintA(void *aptr)
{
A* a1 = reinterpret_cast<A*>(aptr);
a1->Show();
}
当您传递给它一个指针时。
由于您无需收回所有权,因此无需创建std::shared_ptr
。如果需要共享所有权,则必须修改A
以允许使用share_from_this
。