使用带有std :: unique_ptr的抽象删除器

Pup*_*ppy 5 c++ visual-studio-2010 c++11

我想有一个运行时界面,提供一些创建方法.这些方法返回unique_ptr<T>,我想通过创建类启用自定义删除.问题是我绝对不希望接口直接提供这些方法 - 它们应该仅在破坏时才可用unique_ptr<T, SomeCustomDel>.现在,我认为我可以使用std::unique_ptr<T, std::function<void(T*)>>,但我真的不愿意,因为我根本不需要这种抽象级别,我不想支付堆分配.

有什么建议?

How*_*ant 2

我对你的规格不太清楚,但是你考虑过吗unique_ptr<T, void(*)(void*)>?这是一种非常灵活的类型,具有动态删除器的许多品质。

如果这不是您想要的,您可以尝试以下方法:

class impl
{
public:
    virtual ~impl();

    virtual void operator()(void*) = 0;
    virtual void other_functionality() = 0;
};

class my_deleter
{
    impl* p_;
public:
    ...
    void operator()(void* p) {(*p_)(p);}
    void other_functionality() {p_->other_functionality();}
    ...
};
Run Code Online (Sandbox Code Playgroud)

如果没有有关您的要求的更多详细信息,很难知道什么最适合您的情况。