【发布时间】:2019-05-13 22:01:55
【问题描述】:
我正在尝试从函数返回一个 const 对象,以便我可以从中获取信息,但是一旦创建,就无法更改任何内容。我有以下代码
Sprite const& GetSprite() const {
return *m_sprite;
}
std::unique_ptr<Sprite> m_sprite;
int test = 5;
我在代码中的其他地方调用了这个 GetSprite 函数
Sprite sprite = entity->GetSprite();
sprite.test = 6;
这似乎编译得很好,并且在单步执行test 中的值之后实际上已更改。我会假设从 GetSprite 返回的对象不允许我修改该对象,但是 const 限定符似乎被删除了?
是我做错了还是有不同的方法来实现这一点?
【问题讨论】:
-
您正在考虑无法编译的
Sprite & sprite = entity->GetSprite();。 -
Sprite sprite = entity->GetSprite();创建一个可修改的副本。 -
这可能是你想要的:
const Sprite& sprite = ... -
很难防止意外复制,除非明确删除复制构造函数和赋值运算符。
Sprite (const Sprite &) = delete;和Sprite & operator=(const Sprite &) = delete;当然,这使得有意复制变得更加困难。 -
@jjmcc 由于您没有修改您说不应该修改的对象,因此不清楚您为什么要阻止它。你能更准确地了解你想要避免的事情吗?是复制的成本吗?
标签: c++ constants pass-by-reference