返回向量<Foo>或shared_ptr <vector <Foo >>?

Alo*_*mir 5 c++ boost vector shared-ptr c++11

在一个函数中,"返回"会更合适吗?

A. vector<Foo>

B. shared_ptr<vector<Foor>>

换句话说,哪个副本不那么重,你会做什么,为什么?

lar*_*moa 6

我认为shared_ptr<vector<T>>很少回来很有用.如果有几个对象可以容纳他们可以操作的共享向量,我只会这样做.对我而言,这表明存在设计缺陷.一个更好的选择可能是通过const引用返回.这避免了(可能很昂贵的)复制操作,但是不允许访问者改变向量.

如果您要返回当地,std::vector您也可以通过参数返回.

如果你真的想要返回shared_ptr<vector<T>>,请考虑是否shared_ptr<const vector<T>>能完成这项工作(矢量可以被许多人检查,但只能由所有者操纵).

但是A通常比B贵,但返回值优化通常适用于此处.对于C++ 11,std::vector有一个移动构造函数,可以保证返回本地std::vector不需要昂贵的复制操作.

记住,不要过早优化:)