我的應用程序有一個類似於下面的代碼升壓線程 - 通過參考
void SomeClass::OtherMethod(std::vector<std::string>& g)
{
g.pushback("Something");
}
void SomeClass::SomeMethod()
{
std::vector<std::string> v;
boost::thread t(boost::bind(&SomeClass::OtherMethod,this,v)
t.join();
std::cout << v[0]; //Why is this empty when the vector created on stack
}
我想知道爲什麼在棧上創建矢量時,矢量V是空的一個部分,它的工作原理是當在堆上創建。我希望上面的代碼能夠工作,因爲即使在堆棧上創建矢量,矢量仍然在範圍內。
感謝您的回覆。但我仍然沒有得到它。如果綁定複製它的參數,那麼這是如何產生影響的。對不起,我很困惑 – MistyD
@MistyD現在它複製一個'reference_wrapper',它通過引用接受它的參數(即你的向量),並提供隱式的'T&'類型轉換運算符。 –
我明白'boost :: ref'會做到這一點。我只是好奇它爲什麼沒有它就無法正常工作。你聲明,如果不使用boost :: ref,它會複製一份。我只是好奇,即使它做了副本爲什麼不起作用? – MistyD