在正常的 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/