Tôi đã có một lớp học với một biến thành viên nguyên tử:C++ 11: viết hàm khởi tạo bằng nguyên tử <bool> nguyên tử?
struct Foo
{
std::atomic<bool> bar;
/* ... lots of other stuff, not relevant here ... */
Foo()
: bar(false)
{}
/* Trivial implementation fails in gcc 4.7 with:
* error: use of deleted function ‘std::atomic<bool>::atomic(const td::atomic<bool>&)’
*/
Foo(Foo&& other)
: bar(other.bar)
{}
};
Foo f;
Foo f2(std::move(f)); // use the move
Làm thế nào nên di chuyển constructor cái nhìn như thế nào?
Gcc 4,7 không thích bất kỳ nỗ lực của tôi (như thêm std::move()
quanh other.bar
) và lưới là đáng ngạc nhiên yên tĩnh ở đây ...
Cảm ơn, 'cái bar (other.bar.load()) 'là giải pháp đúng đó là biên dịch bây giờ! – Chris
_So, mã của bạn trông giống như nó cần biên dịch._ Không, 'nguyên tử 'có một hàm tạo bản sao đã xóa và độ phân giải quá tải phát hiện ra rằng không phải hàm tạo' nguyên tử (T) '. Các diễn viên hoặc tải là cần thiết. –
@JonathanKhi bạn nói đúng, tôi nghĩ trình biên dịch sẽ tiếp tục với hàm tạo tiếp theo có thể '(T)' khi nó biết hàm tạo bản sao bị xóa và có một toán tử ''. Có phải lý do cho điều này là hàm tạo nguyên tử cho '(T)' là 'constexpr' làm cho nó hoạt động tương tự như các hàm tạo' tường minh' trong các chuyển đổi ngầm định đó hay không (hoặc trong trường hợp này là 'constexpr')? –