我想为数据提供不同级别的const“访问”级别。例如,取决于是否应该修改指针或数据。所以这就是我想出的:
class MyClass
{
int n;
int* ptr_to_data;
int* const const_ptr_to_data;
const int * ptr_to_const_data;
public:
MyClass(int nn)
: n(nn),
ptr_to_data(&n),
const_ptr_to_data(ptr_to_data),
ptr_to_const_data(ptr_to_data)
{
}
~MyClass() { }
int& get_data()
{
return *const_ptr_to_data;
}
const int& get_data() const
{
return *ptr_to_const_data;
}
};
此处的目标是通过限制尽可能多的访问来避免程序员错误。这是一个好方法,如何使其变得更好?
如您所见,您存储的指针不会解决访问问题,但是在复制对象时,它们将引用错误实例中的数据,除非您负责复制。并且顶层const
阻止分配类实例。即,指针是有问题的,并且没有任何优势。
而是这样做:
int data() const
{
return n_;
}
void set_data( int const value )
{
n_ = value;
}
或者,您也可以像在标准库中那样进行操作,并仅将setter命名为data
,但是命令式在调用代码中更具可读性。
这种方法的主要特征是不会传递指针或对非const
数据成员的引用。
因为通过发出不受限制的引用或指针,您将失去对该数据成员的更改的所有控制权,尤其是在维护类不变性(可能还有其他相关值),施加范围限制,检查更改时间等方面。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句