c++中设计类时想到一个问题,请教
一个私有成员,是个数组。
在写它的GET方法时,我直接返回数组名,也就是指针。
那对这个返回值操作的话,实际上不就是直接对实例的该私有变量的地址进行操作?那它本质上不就变成了公有的?是这样吗?
在GET里面新定义一个数组,将值复制进来,再返回这个新数组可以吗?会不会GET方法一结束这个新定义的数组就没有了呢?
问题点数:20、回复次数:9Top
1 楼JohnTitor(贱畜)回复于 2005-07-02 18:42:44 得分 4
class some
{
public:
const int* Get(){return ary;}
private:
int ary[10];
};Top
2 楼sizheng0320(四正)回复于 2005-07-02 19:14:31 得分 0
OK,3xTop
3 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2005-07-02 20:09:33 得分 3
数组返回地址,局部数组的话,就会返回后无效了Top
4 楼Wolf0403(废人:独活十年~心如刀割)回复于 2005-07-02 20:32:03 得分 3
参考 std::vector 等标准库容器的 container - iterator 设计模式吧。Top
5 楼junnyfeng(风歌)回复于 2005-07-02 20:43:57 得分 3
嘿,这正是一个陷阱。这时要程序员负责除去这种陷阱。
主要是用const 类型的指针或引用做返回值类型Top
6 楼jinzita177(高山流水)回复于 2005-07-02 20:47:22 得分 3
const 的用法很重要的。返回const变量,就是不允许改变。
局部数组不可以,不过一般c++使用传数组的引用,所以也可以解决你的需要。Top
7 楼LordSimon(lordsimon@x.cn)回复于 2005-07-02 22:11:35 得分 2
我觉得使用C++的话,应该尽可能的避免这类情况Top
8 楼yameng(雅梦)回复于 2005-07-02 22:51:02 得分 2
最好是避免这类情况,就算你使用const,用户还是可以强制转换成非const型的,
然后直接修改数组的值。Top
9 楼JohnTitor(贱畜)回复于 2005-07-03 01:28:02 得分 0
string的c_str()方法就是返回const char*的Top




