c++ - unique_ptr 删除器开销

标签 c++ c++11 smart-pointers raii

在正常的 C++ 设计中,大多数对象都可以通过 delete 删除。声明,free函数,或库特定的等效于 free .对于此类对象,unique_ptr Deleter实现可以是通过空基类优化消除的无状态对象。但是,某些库需要使用另一个对象(可能包含函数指针或其他上下文)从该库中删除对象。

typedef struct lib_object lib_object;

struct lib_api {
  lib_object (*createInstance)();
  void (*freeInstance)(lib_object *o);
};

可以将其包装在 unique_ptr 中通过存储 lib_api作为自定义数据成员的指针 Deleter , 但如果多个 lib_object需要管理的实例,例如在容器中,它会使跟踪对象的内存开销加倍。在处理这个库时,可以使用什么样的模式来维护 RAII 原则,同时仍然保持内存效率?

最佳答案

如果只有一个 lib_api 对象,那么您可以让删除器获取指向它的静态指针。

如果可以有多个 lib_api 对象,那么您别无选择,只能在 Deleter 中存储一个指向它的指针。

关于c++ - unique_ptr 删除器开销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39966266/

相关文章:

c++ - 如何在C++中获取集合的第一个元素

c++11 - 可以忽略在内存读取(不写入)期间引起的 SIGSEGV 吗?

c++ - C++11 标准容器是 "final"吗?

c++ - 如何清除通用 C++ 代码中的 `double`?

C++一元右折叠与带逗号运算符的一元左折叠

c++ - 获取背包 DP 矩阵中的选定项目列表

c++ - 如何在c++中实现这个数据结构

c++ - 将 weak_ptr 与 unique_ptr 配对是个好主意吗?

c++ - 如何将 std::future<T> 转换为 std::future<void>?

c++ - 在类型说明符中使用 "simple-template-id"