我希望我的函数返回一个对象数组。但我希望对返回的引用有一些限制,以便调用者不会修改返回的值/引用。
例如
class A
{
B **arrB;
public :
A()
{
initialize arrB
}
B** getB()
{
return arrB;
}
}
在上面的代码中,不应修改getB()函数返回的数组。 有人可以提出最佳方法吗? “const”能帮忙吗?
答案 0 :(得分:4)
这应该这样做:
const B * const * getB() const { return arrB; }
编辑:添加const,因为成员函数不会修改内容。
答案 1 :(得分:3)
是的,这会有所帮助。但是,您会收到有关从B **
到const B **
的非法转换的错误,但这就是const_cast
的原因:
const B** getB() const
{
return const_cast<const B**>(arrB);
}
请注意,我在函数声明后添加了一个额外的const
限定符。这告诉编译器该函数不会修改类中的任何内容。
答案 2 :(得分:1)
const
并没有真正帮助。当您尝试修改数组时,编译器可能会引发一些警告/错误,但您始终可以转换为非const
指针并对其进行修改。
const
更像是对班级用户的暗示:我给你的指针是只读的;修改它是危险的!
答案 3 :(得分:1)
嗯,我看到的可能方法是返回从私有数组复制的新数组(包含原始对象实例的副本)。如果你想确保类的私有成员没有被更改,那么你不必关心采用arrB指针副本的代码将用它做什么。但是当然存在诸如更多内存使用以及消费者必须删除所获得的数组的缺点。