如何在C++代码中灵活使用和替换标准::shared_ptr或标准::unique_ptr或原始指针?

How to flexibly use and replace std::shared_ptr or std::unique_ptr or raw pointer in C++ code?

本文关键字:标准 ptr 指针 shared 原始 unique 替换 代码 C++      更新时间:2023-10-16

这是我的意思。很多时候,当我启动一个新程序时,我无法事先决定是使用std::shared还是std::unique_ptr或指向某个C++对象的原始指针。从性能的角度来看,我知道shared_ptrunique_ptr有更多的惩罚,有时原始指针比unique_ptr更好。

在我最近的项目中,团队成员都使用shared_ptr,无论其包装的对象是否有多个所有者。似乎shared_ptr对他们来说要安全得多,所以他们随意使用它。但是,根据我的经验,许多对象不需要shared_ptr,当我们意识到这一点并在以后重构代码时,很可能需要更改许多 API 声明,这并不好。

所以我对此进行了反思,并想问:有没有办法降低这种重构成本?也许我们应该设计一个包装器对象,它可以包装shared_ptr,unique_ptr,或原始指针,后来当我们意识到我们需要改变底层结构时,我们只修改包装器。不更改其他 API。这可能吗?有人试图这样做吗?

你不需要包装器对象,只需要一个别名

using FooPtr = std::unique_ptr<Foo>;

然后始终使用FooPtr

通常你根本不需要指针。考虑返回Fooconst Foo &Foo &