假设我的班级有std::vector<Object*>
应采用以下方法:
const std::vector<Object*> getSth() const
{
return class_member_vector;
}
转换为:
std::vector<Object*> getSth() const
{
return class_member_vector;
}
它总是安全的,应该始终以这种方式纠正吗?
答案 0 :(得分:1)
是的,为清晰起见,您应该使用第二种形式。是的,这始终是安全的。在这两种变体中,您都将按值返回返回值 ,因此该类不会受到修改返回的向量的影响。同样在这两种情况下,被调用方都可以修改向量元素指向的对象,因此外部const
也不会有任何区别。
第一个变体中的const
具有误导性,应将其删除。
但是出于性能原因,您可能需要考虑返回const std::vector<Object*>&
引用。这是否一个好主意取决于类的使用模型(例如生存期,范围)。在性能方面,最好通过const引用返回,因为所有STL容器都会进行深拷贝,而这样做的代价很高。