我在使用智能指针移植一些代码时遇到了一些问题。
旧代码..
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是错误的方法.. 但我想先问一下......
答案 0 :(得分:3)
std::shared_ptr<void>
可以容纳void*
。当你构造这样的shared_ptr
时,你需要提供删除器,它将被类型擦除(因此不属于shared_ptr
类型本身)。你可以这样做:
shared_ptr<void> create_foo() {
return {FooFactory(), FooDestroy};
}