Const保护类中的动态数据

Const guard for the dynamic data inside class

本文关键字:动态 数据 保护 Const      更新时间:2023-10-16

我有一个类与以下这么简单的结构体:

class bmp{
    int w;
    int h;
    uchar* data;
}

如果函数声明如下:

double do_someting(const bmp& image);

不允许编辑image.himage.wimage.data的地址。但是,可以编辑image.data的数据..

问题是:当设计一个类时,是否有一种方法将对象的状态(例如const)与特定属性的状态联系起来?那么,image.data的数据也会安全吗?

几个解决方案:

  1. 使用std::vector<uchar> data(或std::array等)。它将允许在data上只调用const方法,因此它将按预期工作。
  2. 提供自己的getData(),将data设为私有。重载getData为const对象(uchar* getData(); const uchar* getData() const;)
uchar* mutable data;
//     ^^^^^^^

现在,data可以被修改,即使它的父对象在const上下文中被访问。

小心这个。