防止对作为指针返回的对象的更改

Tia*_*sta 2 c++ const

我有一个函数返回指向对象的指针.像这样:

class SomeClass
{
public:
    Object* getObject() const { return &obj; };
private:
    Object obj;
}
Run Code Online (Sandbox Code Playgroud)

问题是我没有调用函数来更改返回的对象,它可能会调用在内部对它进行操作的函数,但是不要更改SomeClass中的obj ...示例可能更容易理解:

- 如果函数返回指向const对象const Object* getObject() const的指针,则调用函数将无法使用对象的非const方法(但我希望它们能够使用).

- 如果我只是返回指针,调用函数可能会更改对象:

Object* pointer = sclass.getObject();
*pointer = Object();
Run Code Online (Sandbox Code Playgroud)

所以Sclass中的Object 现在是一个不同的对象(我不想发生).

有解决方法吗?

Oli*_*rth 9

tl; dr版:返回a const Object *.

如果函数返回指向const对象const Object* getObject() const的指针,则调用函数将无法使用对象的非const方法(但我希望它们能够使用).

但这就是整体的const正确性!Object应声明任何不修改对象的可观察状态的方法const.如果你对此保持一致,那么你的问题就会消失.如果你对此不一致,那么整个事情就会崩溃(这可能是你问题的原因!).

显然,你不能对const那些通过抛弃const-ness来破坏事物的方法做任何事情this,但这总是一个问题.