我有一个调用的类型A,我想创建多个实例,std::unique_ptr<A, void(*)(A *ptr)>而不是每次都显式传递自定义删除器.这就是我想出的:
void ADeleter(A *ptr) {
// custom deletion logic
}
class APtr : public std::unique_ptr<A, void(*)(A *ptr)> {
APtr() : APtr(nullptr) {}
APtr(A *ptr) : std::unique_ptr<A, void(*)(A *ptr)>(ptr, ADeleter) {}
};
Run Code Online (Sandbox Code Playgroud)
std::unique_ptr为了使用自定义删除器抽象构造,继承(或其他智能指针类)是安全的(甚至是一种好的做法)吗?
不,std::你应该继承的唯一类有虚拟析构函数.大多数的设计std是模板参数作为扩展点,而不是子类.
你想要的是
struct ADeleter {
void operator()(A *ptr) {
// custom deletion logic
}
};
using APtr = std::unique_ptr<A, ADeleter>;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
541 次 |
| 最近记录: |