gpt4 book ai didi

c++ - std::unique_ptr 是 RAII 的应用吗?

转载 作者:可可西里 更新时间:2023-11-01 18:15:52 26 4
gpt4 key购买 nike

这是对它的准确描述吗?有道理吗?

您是否保证在 unique_ptr 超出范围之前它指向的对象不会被删除[即使您没有使用 unique_ptr]?

最佳答案

是的,std::unique_ptr遵循RAII设计原则。

不,std::unique_ptr 不会阻止其他代码做一些愚蠢的事情,比如在属于 unique_ptr 的指针上调用 delete >。 unique_ptr 本身将在其拥有的对象上调用 deleter1,当出现以下任一情况时:

  1. 超出范围

  1. unique_ptr 被重新分配(通过operator=reset)以指向不同的对象

还可以通过移动到不同的智能指针或使用release 成员函数来撤销unique_ptr 对对象的所有权。这会破坏对象与 unique_ptr 之间的关联,unique_ptr 将不再清理该对象。


1 默认删除器将使用 deletedelete [],具体取决于目标是否具有数组类型。但是 unique_ptr 是一个模板,它的删除器可以自定义,例如 FILE* 的清理操作可以选择调用 fclose.

此功能可用于安排在 unique_ptr 超出范围时执行任意清理操作。 RAII 用于保持锁定、关闭文件等——如果仅仅因为编译器没有看到智能指针的任何 future 使用而提前执行清理操作,显然会出现重大问题。幸运的是,C++ 对象生命周期规则是完全确定的(即使是同一作用域中多个自动变量的销毁顺序也有明确定义),您可以指望智能指针在其自身销毁时准确地清理其拥有的对象。

关于c++ - std::unique_ptr 是 RAII 的应用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29372976/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com