我有三个类成员:
public:
std::vector<std::shared_ptr<Object> > getObjects();
std::vector<std::shared_ptr<const Object> > getObjects() const;
private:
std::vector<std::shared_ptr<Object> > m_objects;
当我在getObjects()
的const
版本中返回m_objects
时,我收到编译器错误,因为m_objects
与返回类型(std::vector<std::shared_ptr<const Object>>
(不匹配。
在我的解决方法中,我首先通过迭代在本地重建对象向量,然后返回局部向量,但是有没有更优化的方法来处理这种情况?
std::vector<std::shared_ptr<const Object> > objects;
for (auto & object: m_objects)
{
objects.push_back(object);
}
return objects;
从std::vector<std::shared_ptr<T>>
投射到std::vector<std::shared_ptr<const T>>
,即使reinterpret_cast
会产生未定义的行为。有关详细信息,相关问题cast vector<T> to vector<const T>
可能会有所帮助。
创建副本是你能做的最好的事情。但是,正如弗兰克指出的那样,它可以写得更简洁,如return {m_objects.begin(), m_objects.end()}
。这也避免了一些不必要的分配,因为最终容器的大小是立即知道的(与push_back
方法相反(。