未调用std :: unique_ptr中的自定义删除器

西瓦马斯

示例没有意义,但仍然无法解释为什么调用自定义删除器

得到答案后,我编辑了代码,因此myPsmartP超出范围之前不能为null

int * myP = NULL;

{ 
   std::unique_ptr<int, std::function<void(int*)>> smartP(myP, [](int * a) {
        *a = 8; // Custom deleter that is trying to dereference NULL never called
   }); 

   int a = 9;       
   myP = &a;

} // smartP goes out of scope, I expect custom deleter to be called
普雷托里亚人

unique_ptr如果包含的指针不是,则析构函数的析构函数将仅调用其删除器nullptr

从N3337起,[unique.ptr.single.dtor] / 2

效果: 如果get() == nullptr没有效果。否则get_deleter()(get())

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何安全地重载std :: unique_ptr的自定义删除程序?

如何将自定义删除器与std :: unique_ptr成员一起使用?

std :: unique_ptr <T []>和自定义分配器删除器

具有自定义删除器的unique_ptr构造函数被删除

将具有自定义删除器的unique_ptr移到shared_ptr

std :: shared_ptr:带自定义删除器的typedef

std :: unique_ptr使用带有很少参数的自定义删除器

使用带有unique_ptr的自定义删除器

自定义验证器未调用

可以将std :: unique_ptr子类化以透明地应用自定义删除程序吗?

C ++ 11:使用自定义Lambda Deleter返回std :: unique_ptr

std :: unique_ptr与自定义自由操作结合使用

如何制作unique_ptr和自定义删除器的副本

无法使用带有std :: move的自定义删除器插入std :: unique_ptr

如何在C ++ 11中返回包含自定义删除器的std :: unique_ptr?

我可以使用自定义删除器简洁地声明std :: unique_ptr吗?

如何制作将函数包装在noexcept可检测的可调用对象中的类模板,以用作std :: unique_ptr自定义删除器?

std :: unique_ptr的自定义删除程序是否是手动调用析构函数的有效位置?

使用std :: function对象将自定义删除器传递给std :: unique_ptr

thread_local std :: unique_ptr版本未调用析构函数

使用typedef为std :: unique_ptr指定自定义默认删除器

带有lambda自定义删除程序的std :: unique_ptr无法编译

自定义合并器未调用

std :: unique_ptr,自定义删除器和类型更改

在派生类上使用 std::make_unique 和自定义删除器?

如何使用删除器调用unique_ptr构造函数?

unique_ptr 的有状态自定义删除器

如何使用带有 std::make_unique 的 WinAPI 使用自定义删除器?

使用内存池中的自定义删除器将 std::unique_ptr 返回到抽象类型