c++ - unique_ptr 没有操作删除

标签 c++ c++11 unique-ptr

将 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/

相关文章:

c++ - 有关涉及字符串类的核心转储问题的帮助

c++ - std::array 使用大括号复制构造

C++11 在 int x, int y 之间随机,不包括 list<int>

c++ - 在 C++ 中使用 unique_ptr 的工厂模式

c++ - 为父/子关系正确使用 unique_ptr

c++ - 将抽象类型作为 Q_PROPERTY 公开给 QML

c++ - 在 Visual Studio 2013 中尝试使用 C++ 连接到 mysql 时出现未解析的外部问题

c++ - 对 fstream 和指针感到困惑

c++ 11使用lambda排序 vector 跟踪索引

c++ - std::unique_ptr 删除函数,initializer_list - 驱动分配