将shared_ptr与来自void *的typedef的abject一起使用

时间:2016-10-16 23:31:02

标签: c++ pointers smart-pointers

我在使用智能指针移植一些代码时遇到了一些问题。

旧代码..

shared_ptr<Foo> create_Foo();

Foo通过函数

在内部创建
Foo* Foo::FooFactory;

所以我明白我们正在为C ++类/对象创建一个Ptr,然后将该ptr传递给共享的Ptr对象,以创建一个共享的ptr,它将ptr保存到Foo类型的对象...

但是当我想创建一个智能ptr来保存一个像对象形成一个空格的对象时会发生什么呢?

例如

typdef void* FOO_HANDLE
shared_ptr<FOO_HANDLE> create_foo();

使用像

这样的内部工厂函数
FOO_HANDLE FooFactory();

基本上我很困惑宣布并使用typedef FOO_HANDLE对象创建shared_ptr对象,这实际上是一个void *! 另外因为FOO_HANDLE是C对象的ptr,它会通过destroy方法ala来销毁,

FooDestory(FOO_HANDLE);

所以我想我还需要告诉smart_prt关于破坏对象的方法。

我开始认为在这里使用智能ptrs是错误的方法.. 但我想先问一下......

  • 詹姆斯

1 个答案:

答案 0 :(得分:3)

std::shared_ptr<void>可以容纳void*。当你构造这样的shared_ptr时,你需要提供删除器,它将被类型擦除(因此不属于shared_ptr类型本身)。你可以这样做:

shared_ptr<void> create_foo() {
    return {FooFactory(), FooDestroy};
}