初级 5 版。来自自定义删除器函数的 unique_ptr 构造函数

内轮鼬

关于 C++ 入门 5 版。第 12 章动态内存。显示std::unique_ptr操作的表

unique_ptr<T, D>u2 Nullunique_ptr可以指向类型的对象Tu2将使用一个可调用的对象类型D代替delete来释放它的指针。

unique_ptr<T, D> u(d)unique_ptr,它指向类型的对象T使用d,它必须是类型的对象D来代替delete

但是,如果我尝试创建一个这样的:

void cust_del(std::string* pStr){
     std::cout << *pStr + " destroying..." << std::endl;
     delete pStr;
}

int main(){


    {// new scope
    std::unique_ptr<std::string, void(*)(std::string*)> u(cust_del); // error

    std::unique_ptr<std::string, void(*)(std::string*)> u(new string("Hello unique!"), cust_del); // ok
    // or
    // std::unique_ptr<std::string, decltype(&cust_del)> u(new string("Hello unique!"), cust_del);

    }

}

因此,正如我所看到的,不可能unique_ptr从自定义删除函数中构造一个

  • 最后一点:那里说:

与 shared_ptr 不同,没有任何库函数可与返回 unique_ptr 的 make_shared 相媲美。相反,当我们定义一个 unique_ptr 时,我们将它绑定到一个由 new 返回的指针。与 shared_ptrs 一样,我们必须使用直接初始化形式:

但是有std::make_unique这是因为make_unique是由 C++14 添加的,并且该书已针对 C++11 重写?

公园托马托米

std::unique_ptr没有只接受自定义删除器的构造函数。nullptr如果您想要带有自定义删除器的空指针,则必须将其作为指针值传递

关于你的第二点,这是正确的。他们直到 C++14 才添加 make_unique,除了 C++11 是一个巨大的修订版并且某些功能没有加入之外,没有其他原因。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用unique_ptr复制类的构造函数

如何将unique_ptr参数传递给构造函数或函数?

从函数返回unique_ptr

移动涉及const unique_ptr的构造函数

C ++ 11 unique_ptr数组和构造函数参数

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

来自T *的std :: unique_ptr <T>的构造函数背后的原因是什么?

如何在构造函数中使用unique_ptr?

构造函数依赖注入:unique_ptr + move vs shared_ptr

Pimpl with unique_ptr:为什么我必须将接口的构造函数定义移至“ .cpp”?

移动unique_ptr的构造函数和向量

带右值删除器的unique_ptr构造函数返回null?

std :: unique_ptr析构函数构造函数顺序

如何为包装需要2个参数的ac函数的unique_ptr类成员创建自定义删除器?

错误:使用auto调用unique_ptr的隐式删除副本构造函数

明确调用unique_ptr中对象的副本构造函数

std :: unique_ptr构造函数的行为

使用已删除的函数unique_ptr

了解采用自定义删除器的unique_ptr的构造函数

删除函数unique_ptr

标签c ++ unique_ptr move构造函数

使用unique_ptr <>实现移动构造函数和赋值

unique_ptr析构函数的优势

std :: unique_ptr constexpr构造函数

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

unique_ptr 看不到派生类的自定义构造函数

结合 std::unique_ptr 和命名构造函数

指向重载静态成员的函数指针 - 在 unique_ptr 中用作自定义删除器

shared_ptr 和 unique_ptr 构造函数