gpt4 book ai didi

c++ - 在现代 C++ 中使用非智能指针

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:21:38 26 4
gpt4 key购买 nike

简短版本:
在现代 C++ 中使用非智能指针有什么可以接受的理由吗?

长版:
我们有一个包含大量旧 C++ 代码的庞大产品,现在我们正试图将其重构为现代 C++ 时代。除了所有老式代码外,还有大量指针在传递(大多数带有 SAL 注释以提供某种安全感),我想知道我们是否应该将它们全部更改为智能指针,或者保留其中一些?
在尝试转换其中一些代码时,我最终得到了一个可以过度使用智能指针 的代码。

所以问题是:是否存在过度使用智能指针这样的事情?
或者换句话说:现在是否有非智能指针可以接受的场景?

最佳答案

智能指针(unique_ptrshared_ptr)应该是 OWNING 指针(即负责对象的销毁)。使用它们的底线是,任何由 new 创建的对象都应该尽快放入 unique_ptr 中,以防止内存泄漏。之后,unique_ptr 应该最终被移动:

  • 如果所有权应该共享,则进入 shared_ptr
  • 或放入 unique_ptr,如果所有权由范围( block 的范围或对象的生命周期)确定。

release 应该很少见。如果您的代码传递非拥有指针,这些应该是:

  • 原始指针,如果它们可能是 null,(通过 get 获得)
  • 引用,如果它们可能不是null,(通过get获得)
  • unique_ptr 如果调用的目的是转移所有权,则按值。 (在这种情况下,您需要移动它们)

工厂方法应该按值返回 unique_ptr。 (因为那样的话,如果你不给工厂方法的返回值赋值,对象会立即被释放)

并查看 Ali 关于处理遗留代码的一些哲学观点的链接的回答。 (我完全同意)

关于c++ - 在现代 C++ 中使用非智能指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19417574/

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