c++ - 如何编写自定义删除器来处理前向声明的类型
问题描述
一些旧版本的visual-studio需要对要定义的类型进行完整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)
但是当我尝试在visual-studio-2012中执行此操作时,我得到:
警告 C4150:删除指向不完整类型的指针
Foo;
未调用析构函数
有没有办法我也可以解决这个问题?
解决方案
推荐阅读
- neural-network - 如何使用一条 ROC 曲线评估多重测试
- javascript - 警告:使用 auth0 登录时,无法对未安装的组件执行 React 状态更新
- python - 在处理一列列表时,如何使用 to_tsv() 将单引号切换为双引号?
- r - 创建一个忽略 NA 的新变量
- java - 如何在删除前后打印数组列表对象
- java - 寻找下一个闰年java
- python - 如何从 python lambda 返回一个 graphql Union 到 AWS appsync?
- python - YaccError 'Unable to build parser' 试图制作语法分析器
- go - 有没有一种方法可以在不需要任何特殊设置的情况下从另一个二进制文件中执行已编译的 golang 二进制文件中的函数?
- javascript - 如何从firebase获取简单的数组数据并获取它