首页 > 解决方案 > 如何编写自定义删除器来处理前向声明的类型

问题描述

一些旧版本的需要对要定义的类型进行完整default_deleter定义我知道在 Visual Studio 2012 中就是这种情况,但我会给任何能告诉我哪个版本解决了这个问题的人加分。)

为了解决这个问题,我可以编写一个custom_deleter这样的函数:

template <typename T>
void custom_deleter(T* param) {
    delete param;
}

并在前向声明的类型上声明一个智能指针,如下所示:unique_ptr<Foo, function<void(Foo*)>> pFoo,将此指针分配到Foo完全声明的位置,如下所示:pFoo = decltype(pFoo)(new Foo, function(custom_deleter<Foo>))

现在按照这里的建议,我想把我custom_deleter变成这样的仿函数:

struct MyDeleter {
    template <typename T>
    void operator ()(T* param) {
        delete param;
    }
};

应该允许我声明:unique_ptr<Foo, MyDeleter>并分配:pFoo = decltype(pFoo)(new Foo)但是当我尝试在中执行此操作时,我得到:

警告 C4150:删除指向不完整类型的指针Foo;未调用析构函数

有没有办法我也可以解决这个问题?

Live Example

标签: c++visual-studio-2012destructorfunctordelete-operator

解决方案


推荐阅读