c++ - 如何使 const 类与引用的数据一起正常工作?
问题描述
假设我有一个图像类,它引用了一个包含大量数据的缓冲区。
当调用复制构造函数时,除非绝对必要,否则不必复制数据会很好。
但是,如果我从现有的 const 对象构造新的图像对象,则新的图像对象以非常量状态开始,这允许更改新对象中的图像数据,即使旧对象中的图像数据不能.
我相信这是 C++ 中的一个根本问题,因为 shared_ptr 对象也有同样的问题:如果交给你一个 const shared_ptr,你只需要将它复制到一个非 const shared_ptr 中(通过构造函数)即可获得一个可变对象,这似乎是一种抵消 const 正确性的阴险方式。原始指针没有这个问题,因为这样的副本是不允许的。
我知道指针成员本质上不会从它们的所有者那里继承常量,但我所追求的是一种构造一个类以使其看起来像它们的方法,以便轻松确保 const 对象的内容保持 const。
这个问题提供了这个问题的部分答案,因为它建议使用std::experimental::propagate_const
来确保 const 对象中的指针成为 const 指针:
但是,我认为这并不能解决如何确保具有明显指向 const 数据的 const 对象的复制构造函数成为无法更改指向数据的对象的问题。
解决方案
推荐阅读
- mysql - 仅针对具有相同“id”的行获取两个表之间的时间差 - MySQL
- go - 基于线性时间的多个标准的切片中的广义计数元素
- c# - 特定异常类型的异常处理
- ruby-on-rails - 简单的多态连接返回未知列
- angular - 如何使用角度材料下拉菜单制作选定的颜色或字体?
- gitlab - 在 Gitlab 中使用并行关键字减少构建管道时间?
- audio - 如何将 wav 转换为带有时间码的 mxf 文件?
- postgresql - 在 PostgreSQL 中按顺序调用最后一个值时出错
- authorization - 在 Blazor 中,如何实现需要服务器访问权限的客户端授权检查?
- ios - 转换嵌套字典以创建 String Swift