2016-09-20 97 views
0

在這個例子中C++基準返回

class Object { 
    Object(int val); 
} 


std::map<unsigned, Object> myMap; 
Class Foo { 

    Object &getObject (unsigned Id, int val) { 

    auto pair = myMap.emplace(std::piecewise_construct, std::forward_as_tuple(Id), std::forward_as_tuple(val)); 
    if (pair.second) { 
     // do something 
    } 
    else { 
     // do another 
    } 
    return pair.first->second; 
    } 

} 

在一對返回的參考值(破壞特大型的函數)保持有效?

+0

本網站請使用英文(包括標題)。 –

回答

0

是的,它保持有效。

emplace返回std::pairfirst是一個迭代器插入元件和second是一個bool說明如果佈設是成功的。

如果您確定secondtrue,則first中的迭代器指向映射內的元素,因此引用該對象將起作用。

只要確保myMap超出任何getObject()電話當然。

0

只要myMap的範圍是全局的,引用將始終有效,即它不會指向垃圾,而是指向標準映射中的實際元素。