gpt4 book ai didi

c++ - 在公共(public)成员函数中返回私有(private) unique_ptr

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:56:04 24 4
gpt4 key购买 nike

考虑以下类原型(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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com