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

Using shared_ptr with an abject that is typedef from void*

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

旧代码..

shared_ptr<Foo> create_Foo();

其中 Foo 是通过函数在内部创建的

Foo* Foo::FooFactory;

所以我知道我们正在创建一个 C++ class/object 的 Ptr,然后将该 ptr 传递给共享 Ptr 对象以创建一个共享 ptr,其中包含一个指向 Foo 类型对象的 ptr.. .

但是当我想创建一个智能指针来保存一个对象时会发生什么,该对象被类型定义为对象形成一个 void*?

例如

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

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

基本上我对使用 typedef FOO_HANDLE 对象声明和创建 shared_ptr 对象感到困惑,它本质上是一个 void*! 也因为 FOO_HANDLE 是 C 对象的指针,它通过销毁方法 ala 被销毁,

FooDestory(FOO_HANDLE);

所以我想我还需要告诉 smart_prt 销毁对象的方法。

我开始认为在这里使用智能指针是错误的方法.. 但我想我会先在这里问...

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

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