【问题标题】:Const guard for the dynamic data inside class类内动态数据的 const 守卫
【发布时间】:2015-10-09 11:53:56
【问题描述】:

我有以下如此简单的结构的课程:

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

如果函数声明如下:

double do_someting(const bmp& image);

不允许编辑image.himage.wimage.data的地址。不过编辑image.data的数据就可以了..

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

【问题讨论】:

  • 使用非常量设置器将data 设为私有?
  • 它已经过时了,但我可以知道否决票.. 真的是为什么?
  • 投反对票的问题在于,如果投反对票的人不发表评论并且原因不明显,那么 OP 不知道为什么他们的问题被投反对票,也不知道他们可以做些什么来改进它。他们甚至不会收到您发布此评论的通知。我建议你不要太在意它们并继续前进,你真的无能为力。
  • @DeepBlackDwarf 感谢您的澄清

标签: c++ c++11 constants


【解决方案1】:

几个解决方案:

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

【讨论】:

    【解决方案2】:
    uchar* mutable data;
    //     ^^^^^^^
    

    现在,即使在 const 上下文中访问其父对象时,data 也可能被修改。

    对此要小心。这可能会令人困惑。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-24
      • 1970-01-01
      • 1970-01-01
      • 2020-05-03
      • 1970-01-01
      • 2017-11-27
      • 2013-03-31
      • 2022-09-27
      相关资源
      最近更新 更多