c++ 11指针惟一帮助函数

C++11 Pointer Uniquify Helper Function

本文关键字:帮助 函数 指针 c++      更新时间:2023-10-16

在c++ 11中,我缺少一个语法糖来惟一指向std::unique_ptr的指针。因此,我编写了以下小的辅助函数std::uniquify_ptr,通常用于简化(非构造函数)赋值可变类成员(通常是不同类型的缓存)。

#include <memory>
namespace std
{
    template<typename T>
    inline unique_ptr<T> uniquify_ptr(T* ptr)
    {
        return unique_ptr<T>(ptr);
    }
}

我是否从安全的角度遗漏了什么?是否已经有类似的功能?

没有,没有类似的功能可用。

auto ptr(std::uniquify_ptr(new T()));

好吗?
std::unique_ptr<T> ptr(new T());

?也就是说,为什么应该存在 ?

unique_ptr<T>已经可以直接从T*构造,所以不太需要。这样的工厂函数除了语法糖(例如auto x = make_unique<T>(...);)之外几乎没有什么用处。另外,你的move是多余的。

@Schaub:我使用这个改变现有的可变 std::unique_ptr类成员的值。在这种情况下

m_hashA = std::uniquify(new Hashes(cnt));

更方便
m_hashA = std::unique_ptr<Hashes>(new Hashes(cnt)));

当成员声明为

mutable std::unique_ptr<Hashes> m_hashA; ///< Hash Table for Alternatives.

谢谢