将 unique_ptr 传递给不执行任何操作的自定义删除器的最简洁方法是什么?我需要一个我正在编写的 JNI 函数,其中 C++ 端需要一个 unique_ptr,但是,我不希望在退出 JNI 函数时删除 unique_ptr 持有的对象——我稍后会处理删除。所以我想做类似的事情:
std::unique_ptr<MyClass, noop_delete> ptr;
在一行中 - 没有单独的函数定义:-)
最佳答案
正如@101010 指出的那样,std::unique_ptr
带有 nop 删除器是非常奇怪的,因为 std::unique_ptr
唯一有值(value)的东西实际上是删除器。另外,您说过“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>;
请注意,这种 nop 类型可以在任何地方用作空操作来代替单参数仿函数。
关于c++ - unique_ptr 没有操作删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31056525/