gpt4 book ai didi

c++ - unique_ptr - 重大改进?

转载 作者:IT老高 更新时间:2023-10-28 21:48:10 26 4
gpt4 key购买 nike

在实际的 C++ 标准中,创建满足以下规则的集合即使不是不可能也很难:

  1. 异常安全,
  2. 廉价的内部操作(在实际的 STL 容器中:操作是拷贝),
  3. 自动内存管理。

为了满足 (1),集合不能存储原始指针。为了满足 (2),集合必须存储原始指针。为了满足 (3),集合必须按值存储对象。

结论:三项相互冲突。

使用 shared_ptr 时将不满足第 (2) 项,因为当集合需要移动元素时,它需要进行两次调用:构造函数和析构函数。不可能进行大规模的 memcpy() 类复制/移动操作。

上述问题将由 unique_ptrstd::move() 解决,我是否正确?使用这些工具的集合将能够满足所有 3 个条件:

  1. 当一个集合作为异常的副作用被删除时,它将调用 unique_ptr 的析构函数。没有内存泄漏。
    • unique_ptr 不需要任何额外的空间用于引用计数器;因此它的主体应该与包装指针的大小完全相同,
    • 我不确定,但看起来这允许通过使用 memmove() 之类的操作来移动 unique_ptrs 组 (?) ,
    • 即使不可能,std::move() 运算符也允许移动每个 unique_ptr 对象,而无需调用构造函数/析构函数对。
  2. unique_ptr 将拥有给定内存的独占所有权。不会发生意外的内存泄漏。

这是真的吗?使用 unique_ptr 的其他优点是什么?

最佳答案

我完全同意。终于有了一种处理堆分配对象的自然方式。

回答:

I am not sure, but it looks like this allows to move groups of unique_ptrs by using memmove() like operations,

有一个 proposal允许这样做,但它还没有进入 C++11 标准。

关于c++ - unique_ptr - 重大改进?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/956611/

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