C++函数处理无所有权对象时参数选原始指针、智能指针还是引用?
问题场景
设想如下场景:
我定义了类A和类B:
/* 持有shared_ptr的类 */ class A { public: //... private: std::shared_ptr<object_t> m_ptr; }; /* 持有unique_ptr的类 */ class B { public: //... private: std::unique_ptr<object_t> m_ptr; };
我需要实现一个函数,使用并处理m_ptr指向的对象,但不会接管该对象的所有权,需要选择合适的参数定义形式:
- 智能指针形式:
void process(std::shared_ptr<object_t> obj);
- 原始指针形式:
void process(object_t* obj);
补充说明
我之前遗漏了一个非常重要的第三种函数参数定义方式:
void process(object_t& obj);
用户kotatsuyaki指出,这种引用传参的形式才是更优的解决方案。
内容的提问来源于stack exchange,提问作者Marco
相关产品推荐
相关产品推荐

