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

标签 c++ constants

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

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 方法做任何事情,然后通过丢弃 thisconst-ness 来颠覆事物,但是这始终是个问题。

关于c++ - 防止更改作为指针返回的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10982874/

相关文章:

c - 通过头文件中的 ifdef 将结构从 const 转换为非常量

java - 为什么 Java 常量除以零不会产生编译时错误?

c++ - 如何在可变参数/模板类构造函数中正确使用 std::forward

C++ 函数对象模板参数推导风格

c++ - 程序为 double 返回单个值 (C++)

c++ - 从输入中导出最小的正则表达式

python - 在 Django 模板中访问我的用户定义的 python 全局常量

python - 用于处理大整数的多个数字数组

c++ - 当我希望调用基类构造函数时,如何在派生类中初始化成员 const 引用?

c++ - fatal error LNK1104 : cannot open file 'sfml-system-s-d.lib'