将shared_ptr与从void*中定义的对象一起使用
Using shared_ptr with an abject that is typedef from void*
我在移植使用智能指针的代码时遇到了一些问题。
旧代码. .
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};
}
相关文章:
- 自定义对象的dlib序列化在gcc中失败
- 如何将带有自定义对象的容器从C++传递到QML
- 直接在 unordered_map 的方法中使用哈希,而不是生成哈希的用户定义对象
- 如何使用Q_PROPERTY公开自定义对象列表
- 如何在自定义对象的<<运算符中添加自定义前缀
- 将自定义对象作为参数从目标 C 传递到 C++
- 如何使用构造函数声明指向用户定义对象的指针?
- 使用自定义对象声明shared_ptr数组时出现错误 C2664
- 在具有自定义对象的集合中查找值
- std::set 不会检测到重复的自定义对象
- 如何使用自定义对象的序列化在 c++ 中编写自定义二进制文件处理程序
- std::排序为排序自定义对象时出现的向量引发错误
- 如何通过引用对用户定义对象的类型集 (STL) 的数组元素进行增强迭代?
- 具有自定义对象的C 优先级队列
- 自定义对象构造函数在循环外部循环
- 带有自定义对象的C 范围循环
- 为什么不允许通过 decltype(lamda) 定义对象,我该如何改进它?
- 如何正确地将规则 5(或零?)应用于包含带有字符串的自定义对象向量的类
- 编写安全包装类以管理用户定义对象的指针
- 如何在包含自定义对象的容器中使用分区函数C++