5.条款二十八:在class内切勿让public成员函数返回private成员的引用或指针或迭代器

 1 class DoSomething {
 2 private:
 3     char * text;
 4     //...
 5 public:
 6     DoSomething():text(nullptr) {}
 7     //DoSomething(){text=nullptr;}
 8     char *& something() const{
 9         return text;
10     }
11 };

实际上,上面的代码是通不过编译的。因为const函数的属性被抛弃了。我们知道,const修饰的函数不可以改变函数内的成员,但是指针和引用却可以改变。于是乎二者是矛盾的。如果可以这样做,我们在一些不允许用户修改私有成员的接口种却给了用户修改的机会,

这样对封装性和类的损害是巨大的。

猜你喜欢

转载自www.cnblogs.com/Royzzzzz/p/11922239.html