Мое приложение имеет раздел, который напоминает следующий кодПовышения темы - передача параметров по ссылке
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 пуст, когда вектор создается на стеке и он работает, когда он создается в куче. Я ожидал, что вышеприведенный код будет работать, поскольку вектор остается в области видимости даже тогда, когда он создан в стеке.
Спасибо за ваш ответ. Однако я все еще не понимаю. Если bind копирует свой параметр, как это имеет значение. Извините, я здесь смущен – MistyD
@MistyD Теперь он копирует 'reference_wrapper', который принимает свой аргумент (т. Е. Ваш вектор) по ссылке и предоставляет неявный оператор T-type-cast. –
Я понимаю, что 'boost :: ref' будет делать трюк. Мне просто интересно, почему он не работает без него. Вы заявили, что без использования boost :: ref он сделает копию. Мне просто интересно, что, даже если он делает копию, почему она не работает? – MistyD