Мы передаем объект другому потоку.Предполагается, что он будет удален, когда функция oops2 () находится вне области видимости.Как это возможно, что после удаления объекта данных у нас нет сбоев в другом потоке, и другой поток успешно работает с этим объектом?
class Data {
public:
Data(int val = 0) {}
int getVal () const { return mVal; }
void setVal(int val) { mVal = val; }
protected:
int mVal;
};
void set_val(int& i, Data* data)
{
data->setVal(i);
}
void print_val(Data* data)
{
cout << "Data value = " << data->getVal() << endl;
}
struct func2
{
Data* data;
func2(Data* data_): data(data_){}
void operator()()
{
printf("Address of func2 data is %p\n", data);
for (int j=0;j < 1000000;++j)
{
print_val(data);
set_val(j, data);
}
}
};
void oops2()
{
Data* data = new Data(100);
func2 my_func(data);
my_thread = std::thread(my_func);
delete data;
}
int main()
{
oops2();
my_thread.join();
return 0;
}