首页 > 解决方案 > 如何使 const 类与引用的数据一起正常工作?

问题描述

假设我有一个图像类,它引用了一个包含大量数据的缓冲区。

当调用复制构造函数时,除非绝对必要,否则不必复制数据会很好。

但是,如果我从现有的 const 对象构造新的图像对象,则新的图像对象以非常量状态开始,这允许更改新对象中的图像数据,即使旧对象中的图像数据不能.

我相信这是 C++ 中的一个根本问题,因为 shared_ptr 对象也有同样的问题:如果交给你一个 const shared_ptr,你只需要将它复制到一个非 const shared_ptr 中(通过构造函数)即可获得一个可变对象,这似乎是一种抵消 const 正确性的阴险方式。原始指针没有这个问题,因为这样的副本是不允许的。

我知道指针成员本质上不会从它们的所有者那里继承常量,但我所追求的是一种构造一个类以使其看起来像它们的方法,以便轻松确保 const 对象的内容保持 const。

这个问题提供了这个问题的部分答案,因为它建议使用std::experimental::propagate_const来确保 const 对象中的指针成为 const 指针:

如何制作一个深常量指针

但是,我认为这并不能解决如何确保具有明显指向 const 数据的 const 对象的复制构造函数成为无法更改指向数据的对象的问题。

标签: c++pointersconstructorconstantstransitive-const

解决方案


推荐阅读