c++ - 这是 unique_ptr 的正确用法吗?

标签 c++ return smart-pointers unique-ptr

通过阅读此处查找唯一指针时出现的大多数问题,我发现,在我看来,它应该提供构建器模式所描述的行为。

我希望 Builder 的任何实例(或其子类,因为它没有实现任何修改正在构造的对象的过程)拥有正在构造的对象,直到 Close 将唯一指针返回给调用者,此时调用者取得所有权。

Builder.h

template <class type> class Builder
{
public:
    ~Builder();
    unique_ptr<type> Close();
protected:
    Builder();
    unique_ptr<type> _uptr;
};

生成器.cpp

template<class type> Builder<type>::Builder()
{
    uptr = make_unique<type>();
}

template<class type> Builder<type>::~Builder()
{}

template<class type> unique_ptr<type> Builder<type>::Close()
{
    return uptr;
}

我理解按值传递唯一指针的语义吗?

(为了简洁/易读,省略了包含和命名空间)

最佳答案

std::unique_ptr 无法复制。相反,您必须移动 uptr 才能正确转移底层指针的所有权。

template<class type> unique_ptr<type> Builder<type>::Close()
{
    return std::move(uptr);
}

关于c++ - 这是 unique_ptr 的正确用法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39502800/

相关文章:

c++ - 在文字/常量模板参数中使用可变内容

c++ - 如果在共享内存中,pthread 互斥锁是否可以跨线程工作?

c++ - 名称带有空格的文件不会被编译

c++ - 在 Qt 中将 T 的集合转换为 QVariant 的集合

c - 为什么这会返回 NULL

jQuery 返回未按预期工作

c++ - 如何从原始 C 堆内存指针初始化 unique_ptr?

c++ - 堆损坏

ios - 快速条件函数返回

c++ - 空悬挂指针 C++