在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);
}
}从安全的角度看我是不是漏掉了什么?类似的功能是否已经可用?
发布于 2011-10-01 22:38:24
unique_ptr<T>已经可以直接从T*构建,因此几乎不需要。这样的工厂功能除了语法糖(如auto x = make_unique<T>(...); )之外,几乎没有什么用处。而且,您的move也是多余的。
发布于 2011-10-01 22:38:03
不,现在还没有类似的功能。最近怎么样?
auto ptr(std::uniquify_ptr(new T()));比.
std::unique_ptr<T> ptr(new T());?也就是说,为什么会存在这种情况?这并不能帮你多大的忙。
发布于 2011-10-02 13:38:31
@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.谢谢
https://stackoverflow.com/questions/7623383
复制相似问题