考虑以下类原型(prototype):
class ObjHandler {
std::unique_ptr<Obj> GetPtr() { return obj; }
private:
std::unique_ptr<Obj> obj;
};
这会生成一个编译时错误,说明 std::unique_ptr
的复制构造函数已被删除。为什么这里不应用移动语义?是否与 GetPtr()
不拥有 obj
指针有关?我应该如何实现我的代码(我需要一个成员函数以最小的开销返回一个指向流的拥有指针)?
最佳答案
unique
实际上意味着“独特的所有权”。创建所有权的拷贝是没有意义的,因为那样它就不再是唯一的了。
你可能想要的是返回一个引用到包含的对象,或者一个非拥有指针:
class ObjHandler {
Object &get(){ return *obj; }
Object *GetPtr() { return obj.get(); }
private:
unique_ptr<Object> obj;
};
This post是关于使用智能指针的内容/位置/原因的非常好的演讲。
还有 CppCoreGuidelines对此也有提示:根据定义,原始指针指示该对象不被拥有。
关于c++ - 在公共(public)成员函数中返回私有(private) unique_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42734826/