1

在 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);
    }
}

从安全的角度来看,我在这里遗漏了什么吗?是否已经有一些类似的功能可用?

4

3 回答 3

3

不,目前还没有类似的功能可用。怎么

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

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

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

于 2011-10-01T22:38:03.693 回答
2

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

于 2011-10-01T22:38:24.230 回答
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.

谢谢

于 2011-10-02T13:38:31.457 回答