std::move a std::atomic

0

Cześć:
Poniższy kod się kompiluje no więc to znaczy, że std::atomic mogą być przenoszone:
http://coliru.stacked-crooked.com/a/bd04e4b49d3bd5f5

W takim razie, nie mogę sobie wyobrazić na czym polega "przenoszenie" std::atomic w sensie niskopoziomowym?

1

Cytując Herba Suttera

Herb Sutter napisał(a)

copy is a valid implementation of move

Przy czym, w Twoim kodzie move'a nie ma. std::move to nic innego jak rvalue_cast, a konstruktora kopiującego bądź inicjalizującego z std::atomic<int> nigdzie nie masz.

Gdybyś go miał, to kompilator by Ci powiedział, że copy constructor dla std::atomic jest usunięty: http://en.cppreference.com/w/cpp/atomic/atomic/atomic

0

Dobrze, ale jest wygenerowany jakiś copy/move konstruktor domyślny? On nie jest domyślnie implementowany tak, żeby przenosił/kopiował pola ich odpowiednimi konstruktorami?

2

Jeśli jest to możliwe i są spełnione pewne reguły - tak. W przypadku std::atomic copy constructor zdefinionwany przez użytkownika (jako deleted) blokuje generację automatyczną move constructora. Ponieważ jest deleted to nie może zostać użyty.

Przydatna tabelka:
user image

0

dzięki :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0