3

私のアプリケーションには、次のコードのようなセクションがあります

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 が空であり、ヒープ上に作成されたときに機能する理由を知りたかったのです。ベクトルがスタック上に作成されてもスコープ内にあるため、上記のコードが機能することを期待していました。

4

2 に答える 2

10

Bindパラメータをコピーします。使用boost::ref:

boost::thread t(boost::bind(&SomeClass::OtherMethod,this, boost::ref(v))
于 2013-06-20T17:02:05.587 に答える