我希望传递对 map 的引用,而没有将 map 放在其他地方-这就是我正在使用的东西:

map<string, Node> _neighbors; // Instance Variable


Node& neighbor(Node& neighbor) {
    cout << "HOST: "<< neighbor.host() << " ADDRESS: " << &neighbor << endl;
    string key = this->getKey(neighbor);

    if(!_neighbors.count(key)) {
        _neighbors[key] = neighbor;
        cout << "HOST (AFTER): "<< _neighbors[key].host() << " ADDRESS: " << &_neighbors[key] << endl;
        neighbor.neighbor(*this);
    }

    return *this;
}

输出:
当我打电话给n1.neighbor(n2); // n1 is a Node with host=1 and n2 is a Node with host=2
主机:2地址:0x7fff5fbfe580

主机(之后):2地址:0x100100128

最佳答案

您不能将引用存储在STL容器中。容器存储的对象不是引用的对象(此外,容器中存储的对象必须是可分配的,而引用是不可分配的)。

您将要使用一个指针映射:

std::map<std::string, Node*>

另外,提防所有权问题。您需要确保在所有引用它们的对象都使用它们之前,不要破坏这些对象。如果在多个地方使用了对象,请考虑使用共享所有权智能指针(例如shared_ptr)为您管理对象寿命。 C++中的手动资源管理充满了风险,应不惜一切代价避免这样做。

10-04 12:57