【发布时间】:2017-10-18 13:54:41
【问题描述】:
我知道std::unique_ptr 是这样的,并且可能不会更改以破坏向后兼容性,但我想知道是否有人有充分的理由说明规范的编写者没有重载get 方法带有一个看起来像
const T* get() const;
遵循unique_ptr 成为const 的意图。
我最好的猜测是它试图镜像指针并像T* const 而不是典型的类。作为后续问题,如果我想在我的类的 const 实例中以类似 const 的方式保存指针,我是否应该使用 std::unique_ptr 以外的其他东西来保存数据?
更新
就我而言,我想保护自己不误用类本身中的指针。我正在编写一个 const move 构造函数MyClass(const MyClass&& other),并通过std::copy 将数据从新实例复制到其他实例中。由于 const 保护,我假设副本必须是正确的,因此花了很长时间才找到错误。我试图弄清楚我可以做些什么来保护自己免受这种情况的影响,除了提供一个 const getter 并在进行复制时在类中使用它。
【问题讨论】:
-
关于后一个问题,
std::unique_ptr<YourClass const>不会做你所寻求的吗?还是我误解了问题的那一部分。 -
在我的例子中,我假设我只是包装一些数据,比如结构,所以它只是一个
char[]和一个int来表示长度。我想传递它并让消费者操纵字节,除非他们有一个 const 实例。即使我为数据提供 const 和非 const getter,我也想确保我的内部方法不会与传递给我的类方法的 const 实例上的数据混淆 -
我不明白你的更新。这似乎是一个 XY 问题,或者完全不同的问题。为什么你想要一个 const move 构造函数?什么是“常量保护”?
-
您的 const move 构造函数没有任何意义,如果我理解正确,您只是实现了一个复制构造函数。如果移动构造函数在你的类中没有意义,那很好,不要创建一个,不需要破解任何东西......
标签: c++ c++11 constants smart-pointers