c++ - 创建其他对象时如何使用同一个对象实例?

我是 C++ 的新手,开始使用引用,这让我得到了以下代码:

#include <iostream>
#include <unordered_map>

class Wrapper {
private:
    std::unordered_map<std::string, int> map;
public:
    void add(std::string &key, int value) { map[key] = value; }
    int get(std::string &key) { return map[key]; }
};

class Writer {
private:
    Wrapper wrapper;
public:
    explicit Writer(const Wrapper &wrapper) : wrapper(wrapper) 
    { 
        std::cout << "Writer: " << &wrapper << std::endl; 
    }
    void write(std::string key, int value) { wrapper.add(key, value); }
};

class Reader {
private:
    Wrapper wrapper;
public:
    explicit Reader(const Wrapper &wrapper) : wrapper(wrapper) 
    { 
        std::cout << "Reader: " << &wrapper << std::endl; 
    }
    int read(std::string key) { return wrapper.get(key); }
};

我的主要功能:

int main() 
{
    Wrapper wrapper;
    Writer writer(wrapper);
    Reader reader(wrapper);

    writer.write("key", 123);
    std::cout << "Value: " << reader.read("key") << std::endl;
}

当我创建 WriterReader 实例时,我传递了对 Wrapper 类相同实例的引用。我希望 writer 添加的值也应该对 reader 可用,因为它们使用相同的 wrapper 实例。但是,read("key") 调用返回 0,因为 key 未知。

我哪里做错了,我怎样才能达到预期的效果?

最佳答案

成员变量也必须在读写器中声明为引用

class Writer {
private:
    Wrapper & wrapper;
}


class Reader {
private:
    Wrapper & wrapper;
}

https://stackoverflow.com/questions/73279043/

相关文章:

caching - Aerospike 为特定字段设置到期日期

reactjs - 使用 React Router 将可选查询参数添加到动态路径

python - 如何按列导出数据框以分隔 csv 文件?以及如何将不同数据框中的列附加到分离的 c

delphi - 组件是特定类 - 在 BPL 结构中不起作用

python - 如果数字在 Pandas 的指定范围内,如何返回值

c++ - 子类调用父复制分配而不是移动分配?

google-cloud-platform - 我无法让 google cloud function

javascript - ECMA脚本 : What does `status` mean in S

c - gcc中的 '-Wextra'和 '-pedantic'有什么区别?

python - 根据另一个的范围和类别填充 Pandas 列