通过阅读此处查找唯一指针时出现的大多数问题,我发现,在我看来,它应该提供构建器模式所描述的行为。
我希望 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/