增压的最佳选择:scoped_ptr<T>痘痘

Best choice over boost:scoped_ptr<T> pimpl

本文关键字:lt 痘痘 gt ptr 最佳选择 scoped      更新时间:2023-10-16

我不是在使用boost只是标准库,我在某些问题中看到boost::scoped_ptr<T>std::unique_ptr之间的主要区别在于boost::scoped_ptr<T>既不可复制也不可移动,那么我想知道,什么是最好的选择boost::scoped_ptr<T>?使用std::unique_ptr或使用具有三/五规则的原始指针以避免复制和移动?

我建议使用const std::unique_ptr

你几乎从不想直接管理原始指针,所以unique_ptr是唯一明智的选择(shared_ptr不适合 pimpl,你很少想共享 impl 对象)。添加const将使其不可移动,例如scoped_ptr

这个问题有点模棱两可,但答案非常明确,你应该使用 std::unique_ptr 或 std::shared_ptr 来保存你的 pimpl,这取决于你是希望你的类共享状态 (shared_ptr) 还是具有独占访问权限,具有自动移动的好处 (unique_ptr)。

裸指针的管理非常难以正确,如果您在同一类中管理多个指针,则是不可能的。 unique_ptr 旨在帮助您轻松编写完美的程序。

你最好使用它。