【发布时间】:2015-06-12 11:39:45
【问题描述】:
我正在尝试使用智能指针为类成员变量创建访问器。代码如下:
class MyResource
{
};
class MyClass
{
public:
std::unique_ptr<MyResource> getResource();
private:
std::unique_ptr<MyResource> resource;
};
std::unique_ptr<MyResource> MyClass::getResource()
{
return this->resource;
}
我在编译时遇到的错误:
无法访问在类 'std::unique_ptr<_ty>' 中声明的私有成员
将.get 添加到this->resource 当然是行不通的,因为返回类型发生了变化。
我不应该在这里使用 unique_ptr 吗?这只是语法问题吗?我完全走错了吗?
我的智能指针背景: 几年来我一直在使用普通的旧指针,部分原因是我找不到关于何时使用哪种类型的智能指针以及如何使用它们的可靠解释。我厌倦了找借口,所以我只是潜入。我想我了解什么是智能指针以及为什么要使用它们,但我对细节了解甚少。目前我完全迷失在theendlessQ&Aaboutsmartpointers。
【问题讨论】:
-
您不应该在这里使用唯一指针。按值返回或使其成为共享指针。
-
@dwcanillas 或者通过引用或原始指针返回。
-
@Angew 是的,没错。唯一指针的全部意义在于它们是唯一的,有一个指针指向一个对象。
-
@OP 您知道
std::unique_ptr<MyResource> MyClass::getResource()会将所有权转移给调用者吗?这很可能不是你想要的,除非设计一个工厂。 -
注意:没有 std::move (std::forward) 就不能转让所有权,请参阅 Barry 的回答
标签: c++ c++11 smart-pointers