在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);
}
}
我是否从安全的角度遗漏了一些内容?是否有一些类似的功能?
答案 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.
由于