Re[4]: COW and thread safety in Qt
От: Skorodum Россия  
Дата: 12.10.23 07:50
Оценка:
Здравствуйте, andyp, Вы писали:

A>Foo::Foo() 0x7f7633163c98 QThread(0x563e12505fe0)

A>Foo::Foo(Foo&&) 0x7f762c005c58 QThread(0x563e12505fe0)
A>Foo::~Foo() 0x7f7633163c98 QThread(0x563e12505fe0)
Этот вывод соответсвуют этому коду:
anotherBar.foos.append(Foo());


A>QThread(0x563e12505fe0) producer data before signal "7f762c005c58"

A>QThread(0x563e12505fe0) producer data after signal "7f762c005c58"
A>QThread(0x563e12505e20) void Bar::dataByValue(QVector<Foo>) 1
A>QThread(0x563e12505e20) consumer data "7f762c005c58"
Все правильно: у нас все тот же объект, никакой глубокой копии не произошло.

A>Foo::Foo(const Foo&) 0x7f762c0054d8 QThread(0x563e12505fe0)

A>Foo::~Foo() 0x7f762c0054d8 QThread(0x563e12505fe0)
A>QThread(0x563e12505fe0) 0

Посмотрите, как измениться вывод, если раскомментировать это
//foo.append(Foo()); // <- comment out to see effect of COW
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.