首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++11指针统一化帮助函数

C++11指针统一化帮助函数
EN

Stack Overflow用户
提问于 2011-10-01 22:31:01
回答 3查看 185关注 0票数 1

在C++11中,我缺少了一个合成糖,因为它是指向std::unique_ptr的唯一指针。因此,我编写了以下小助手函数std::uniquify_ptr,通常用于简单(非构造函数)分配可变类成员(通常是不同类型的缓存)。

代码语言:javascript
复制
#include <memory>

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

从安全的角度看我是不是漏掉了什么?类似的功能是否已经可用?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-01 22:38:24

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

票数 2
EN

Stack Overflow用户

发布于 2011-10-01 22:38:03

不,现在还没有类似的功能。最近怎么样?

代码语言:javascript
复制
auto ptr(std::uniquify_ptr(new T()));

比.

代码语言:javascript
复制
std::unique_ptr<T> ptr(new T());

?也就是说,为什么会存在这种情况?这并不能帮你多大的忙。

票数 3
EN

Stack Overflow用户

发布于 2011-10-02 13:38:31

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

代码语言:javascript
复制
m_hashA = std::uniquify(new Hashes(cnt));

代码语言:javascript
复制
m_hashA = std::unique_ptr<Hashes>(new Hashes(cnt)));

成员被声明为

代码语言:javascript
复制
mutable std::unique_ptr<Hashes> m_hashA; ///< Hash Table for Alternatives.

谢谢

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7623383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档