Lines od Anthony Williams książki:std :: posunięcie C++
Poniższy przykład ilustruje użycie std :: przenieść do przeniesienia własności dynamicznego obiektu w wątku:
void process_big_object(std::unique_ptr<big_object>); std::unique_ptr<big_object> p(new big_object); p->prepare_data(42); std::thread t(process_big_object,std::move(p));
określając
std::move(p)
w konstruktorastd::thread
, własnośćbig_object
jest przenoszony najpierw do wewnętrzny przechowywania na nowo utworzony wątek, a następnie wprocess_big_object
.
Rozumiem stos i stertę; jakikolwiek pomysł, co tak naprawdę jest to ?
Dlaczego nie można przenieść ich własność bezpośrednio do process_big_object
?
każdy wątek ma swój własny stos. Obiekt wątku musi najpierw zażądać utworzenia własnego stosu i innych zasobów systemu operacyjnego, zanim będzie mógł wywołać twoją funkcję z własnym stosem jako bazą. Musi więc przechowywać dane gdzieś przed wysłaniem do swojej funkcji. – PeterT
dzięki, @PeterT. który odpowiedział na ostatnią część moich pytań. –