C ++ 11指针Uniquify Helper函数

时间:2011-10-01 22:31:02

标签: c++ c++11 type-safety unique-ptr

在C ++ 11中,我缺少一个用于统一指向std::unique_ptr的指针的合成糖。因此,我编写了以下litte辅助函数std::uniquify_ptr,通常用于可变类成员的简单(非构造函数)赋值(通常是不同类型的缓存)。 / p>

#include <memory>

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

我是否从安全的角度遗漏了一些内容?是否有一些类似的功能?

3 个答案:

答案 0 :(得分:3)

不,目前还没有类似的功能。怎么样?

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

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

?即,为什么应该存在?如果有的话,它不会为你节省太多。

答案 1 :(得分:2)

unique_ptr<T>已经可以直接从T*构建,因此几乎没有必要。除了语法糖之外,这种工厂功能几乎没有用,例如auto x = make_unique<T>(...);。此外,您的move也是多余的。

答案 2 :(得分:0)

@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.

由于