这种用于const指针的方法可以吗?

用户名

我想为数据提供不同级别的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;
    }
};

此处的目标是通过限制尽可能多的访问来避免程序员错误。这是一个好方法,如何使其变得更好?

干杯和hth。-阿尔夫

如您所见,您存储的指针不会解决访问问题,但是在复制对象时,它们将引用错误实例中的数据,除非您负责复制。并且顶层const阻止分配类实例。即,指针是有问题的,并且没有任何优势。

而是这样做:

int data() const
{
    return n_;
}

void set_data( int const value )
{
    n_ = value;
}

或者,您也可以像在标准库中那样进行操作,并仅将setter命名为data,但是命令式在调用代码中更具可读性。


这种方法的主要特征是不会传递指针或对非const数据成员的引用

因为通过发出不受限制的引用或指针,您将失去对该数据成员的更改的所有控制权,尤其是在维护类不变性(可能还有其他相关值),施加范围限制,检查更改时间等方面。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章