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

时间:2019-06-04 17:15:42

标签: c++ c++11 casting smart-pointers

我有三个班级成员:

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;

当我以m_objects的{​​{1}}版本返回const时遇到编译器错误,因为getObjects()与返回类型不匹配({{1} }。

在解决方法中,我首先通过迭代在局部重建对象向量,然后返回局部向量,但是有没有更优化的方式来处理这种情况?

m_objects

1 个答案:

答案 0 :(得分:1)

您不能从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方法相比)。