gpt4 book ai didi

c++ - 可以子类化 std::unique_ptr 以透明地应用自定义删除器吗?

转载 作者:太空狗 更新时间:2023-10-29 19:40:12 25 4
gpt4 key购买 nike

我有一个类型叫做 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) {}
};

std::unique_ptr 继承是否安全(甚至是一种好的做法)? (或其他智能指针类)以便使用自定义删除器抽象构造?

最佳答案

不,std:: 中您应该继承的唯一类具有虚拟析构函数。大多数std的设计都是模板参数作为扩展点,而不是子类化。

你想要的是

struct ADeleter {
void operator()(A *ptr) {
// custom deletion logic
}
};

using APtr = std::unique_ptr<A, ADeleter>;

关于c++ - 可以子类化 std::unique_ptr 以透明地应用自定义删除器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47054082/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com