Fra*_*ank 2 c++ unique-ptr c++11
将unique_ptr传递给什么都不做的自定义删除工具最简洁的方法是什么?我需要一个我正在编写的JNI函数,其中C++端需要unique_ptr,但是,我不希望在退出JNI函数时删除unique_ptr所持有的对象 - 我稍后会处理删除.所以我想做一些像:
std::unique_ptr<MyClass, noop_delete> ptr;
Run Code Online (Sandbox Code Playgroud)
在一行中 - 没有单独的函数定义:-)
lis*_*rus 10
正如@ 101010指出的那样,std::unique_ptr使用nop删除器是非常奇怪的,因为唯一有价值的东西std::unique_ptr实际上是删除器.另外,你说"C++方面需要一个unique_ptr",但是std::unique_ptr一个不同的删除器将是一个不同的类型,这可能不起作用.
不过,这是做到这一点的方法:
struct nop
{
template <typename T>
void operator() (T const &) const noexcept { }
};
template <typename T>
using nop_unique_ptr = std::unique_ptr<T, nop>;
Run Code Online (Sandbox Code Playgroud)
请注意,此nop类型可以在任何地方用作无操作,而不是单参数仿函数.