c++ - 强制函数的返回值存储在 const 变量中/被视为 const

标签 c++

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

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

假设我有结构 A 和 B,它们都包含共享指针。 现在我有了 C 类。C 类包含 A 的一个实例。 C 有一个 const 方法 getB(),它返回一个 B 类型的对象,该对象是在此时创建的,并且包含 A 的共享指针的拷贝。但是,我希望调用 getB() 的人无法修改 B 的内容,特别是shared_pointer指向的内存区域。

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

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

最佳答案

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

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

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

    void doSomeStuff() {...}    

private:
    B _b;
};

关于c++ - 强制函数的返回值存储在 const 变量中/被视为 const,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18080430/

相关文章:

c++ - 如何在Qt 中的网格布局中添加滚动条?

c++ - 编译SDL2代码时出错

c++ - 具有可变数量参数的函数,这些参数被转换为字符串

c++ - 无法理解为什么 XCode 链接器看不到某些方法

c++ - 我怎样才能部分特化所有枚举的类模板?

c++ - 是什么让 glBufferSubData 在大缓冲区上变慢?

博弈树的C++实现

c++ - 有两个 cin 的无限循环

c++ - 这段代码是逆时针还是顺时针旋转关于叉积的点云?

c++ - 为什么 std::ostream 不能移动?