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

标签 c++ smart-pointers

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

相关文章:

c++ - 下面的 C++ shared_ptr 用法会不会有任何泄漏?

C++事件驱动示例

java - 通过 C++/Java 进行音频编辑

c++ - 场景图、共享指针和常量传播

c++ - 如何将智能指针与 Allegro 位图一起使用?

c++ - 多线程 std::shared_ptr 读/写

c++ - 将 std::vector<std::shared_ptr<T>> 转换为 std::vector<std::shared_ptr<const T>>

c++ - 将 vector bool 复制到 CUDA 内存时出错

c# - 什么相当于C#中的map of maps

c++ - 鼠标指针渲染器