将void *转换为类型的shared_ptr

时间:2018-08-08 04:23:31

标签: c++ c++11

在下面的代码中,我试图将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指针转换为类型的共享指针?

1 个答案:

答案 0 :(得分:4)

假设您无法更改PrintA的声明,则您的PrintA定义应类似于:

void PrintA(void *aptr)
{
    A* a1 = reinterpret_cast<A*>(aptr);
    a1->Show();
}

当您传递给它一个指针时。 由于您无需收回所有权,因此无需创建std::shared_ptr。如果需要共享所有权,则必须修改A以允许使用share_from_this