I need to generate a bunch of random numbers and use(just read) them from different threads. Here's how I generate the numbers:
const std::vector<double>* Test::getRandomDoubles(int count)
{
std::vector<double>* numbers = new std::vector<double>();
numbers->reserve(count);
for (int i = 0; i < itemsCount; i++)
{
srand((int)std::chrono::high_resolution_clock::now().time_since_epoch().count());
numbers->emplace_back(rand() / 1000);
}
return numbers;
}
But I lose the numbers at some point:
std::future<void> SomeMethod(const std::vector<double>& numbers)
{
return std::async( // breakpoint: numbers are available when creating the future.
std::launch::async,
[&]()
{ // breakpoint: numbers gone. <-
// Use numbers
And if helps, I call SomeMethod like:
// Just want to run some test for SomeMethod.
std::vector<void> futures;
for(int i = 0; i < 10; i++)
{
std::vector<double> numbers = *getRandomDoubles(count);
futures.emplace_back(SomeMethod(numbers));
}
for(int i = 0; i < 10; i++)
{
futures[i].get();
}
Currently, I'm not calling delete on the numbers anywhere in my code.
What should I do to have numbers inside the async lambda?