我有一个返回对象指针的函数。像这样:
class SomeClass
{
public:
Object* getObject() const { return &obj; };
private:
Object obj;
}
问题是我没有调用函数来更改返回的对象,它可能会调用在内部对其进行操作的函数,但不要更改 SomeClass 中的 obj... 一个例子可能更容易理解:
-如果函数返回一个指向 const 对象的指针 const Object* getObject() const
调用函数将无法使用对象的非 const 方法(但我想要它们能够)。
-如果我简单地返回指针,调用函数可能会改变对象:
Object* pointer = sclass.getObject();
*pointer = Object();
所以 sclass 中的对象现在是一个不同的对象(我不想发生这种情况)。
有解决办法吗?
最佳答案
tl;dr version:返回一个const Object *
。
If the function returns a pointer to a const Object
const Object* getObject() const
the calling function won't be able to use non-const methods of the object (but I want them to be able).
但这就是 const
的全部意义所在——正确性!任何不修改对象可观察状态的 Object
方法都应声明为 const
。如果您对此保持一致,那么您的问题应该会消失。如果您对此不始终如一,那么整个事情就会分崩离析(这可能是您出现问题的原因!)。
显然,您不能对 const
方法做任何事情,然后通过丢弃 this
的 const
-ness 来颠覆事物,但是这始终是个问题。
关于c++ - 防止更改作为指针返回的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10982874/