将shared_ptr与从void*中定义的对象一起使用

Using shared_ptr with an abject that is typedef from void*

本文关键字:定义 对象 一起 shared ptr 与从 void      更新时间:2023-10-16

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

旧代码. .

shared_ptr<Foo> create_Foo();

其中Foo是通过函数

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

所以我理解我们正在创建一个Ptr到一个c++类/对象,然后将该Ptr传递给共享Ptr对象,以创建一个共享Ptr,该Ptr保存一个Ptr到Foo类型的对象…

但是当我想创建一个智能ptr来保存一个类型定义为void*的对象时,会发生什么?

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

使用内部工厂函数,如

FOO_HANDLE FooFactory();

基本上我对声明和创建shared_ptr对象与一个typedef FOO_HANDLE对象感到困惑,这本质上是一个void*!而且因为FOO_HANDLE是C对象的ptr它会通过destroy方法ala

被销毁
FooDestory(FOO_HANDLE);

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

我开始认为在这里使用智能文件是错误的方法。但我想我应该先问这里…

    詹姆斯

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

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