将 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};
}
我 运行 在移植一些使用智能指针的代码时遇到了一些问题。
旧代码..
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};
}