【问题标题】:Forcing the return value of a function to be stored in a const variable/to be treated as const强制将函数的返回值存储在 const 变量中/被视为 const
【发布时间】:2013-08-06 21:21:11
【问题描述】:

这里提出了一个类似的,也许是相同的问题: force const storing of returned by value value

但是,大部分讨论都集中在“你为什么要这样做?”

假设我有结构 A 和 B,它们都包含一个 shared_pointer。 现在我有了 C 类。C 类包含 A 的一个实例。 C 有一个 const 方法 getB(),它返回一个 B 类型的对象,该对象是当时创建的,并且包含 A 的 shared_pointer 的副本。但是,我希望调用 getB() 的人不能修改 B 的内容,尤其是 shared_pointer 指向的内存区域。

在我的用户案例中,我无法修改 A 类和 B 类(恰好是 Opencv 的 IplImage 和 cv::Mat)

获得我的目标的唯一方法是返回一个新创建的B const *吗? (在这方面,this is a very useful answer

【问题讨论】:

  • 我不是 C++ 大师,但您似乎想要的是一个冻结的对象,而不是一个 const 指针...
  • @fortran 他似乎想要的东西没有意义。 C++ 使用值语义,因此您始终可以将返回的值复制到非常量变量中,然后对其进行修改。
  • 为什么不能返回 const 引用?
  • @Mikhail:因为可以复制。
  • @Mikhail 因为我希望类 C 不包含类 B 的实例。 getB() 必须返回的内容取决于属于 C 的 A 实例的当前值。如果我的类有2 个成员 A m_a;B m_b,我必须在每次更改 m_a 时更改 m_b。在调用 getB() 时更新 m_b 将使我的方法不再是 const。

标签: c++


【解决方案1】:

您可以使用proxy 模式:http://www.oodesign.com/proxy-pattern.html

创建一个B 的代理来控制对其的访问,并从您的方法中返回一个代理而不是B 本身。

class BProxy
{
public:
    BProxy(const B &b) : _b(b) {}

    void doSomeStuff() {...}    

private:
    B _b;
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-18
    • 2023-01-31
    • 1970-01-01
    • 1970-01-01
    • 2019-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多