Tôi có một class A
với biến thành viên _atomicVar
loại std::atomic<int>
.
lỗi C2280: cố gắng tham chiếu đến hàm đã xóa (nguyên tử <int>)
#include <atomic>
class A
{
public:
A();
~A();
private:
std::atomic<int> _atomicVar;
};
Nếu tôi xây dựng dự án tôi nhận được lỗi sau:
error C2280: 'std::atomic<int>::atomic(const std::atomic<int> &)' : attempting to reference a deleted function
tôi chủ yếu là một nhà phát triển C# vì vậy tôi không biết từng chi tiết của C++ (chưa). Tôi không biết nơi tôi sử dụng bản sao c'tor của atomic<int>
.
Tôi cũng đã cố gắng để khởi tạo _atomicVar
:
std::atomic<int> _atomicVar { 0 };
... nhưng điều đó không làm việc.
Tôi hy vọng rằng _atomicVar
(không có khởi tạo rõ ràng) sẽ được khởi tạo với giá trị mặc định cho int
.
Bạn có thể cho tôi biết tại sao lỗi này xảy ra không?
Dường như bạn đang sử dụng Visual Studio. Phiên bản nào? Ngoài ra trên những dòng mã bạn nhận được lỗi? –
Đó có phải là toàn bộ mã của bạn không? Có lẽ bạn đang sao chép các đối tượng 'A'? Có lẽ bạn sử dụng một container đòi hỏi các phần tử 'CopyConstructible'? – zch
Đơn giản chỉ cần không xác định constructor sao chép là đủ lý do cho điều này xảy ra.Khi bạn định nghĩa các kiểu, có chứa các thành phần 'nguyên tử', bạn phải xác định rõ ràng ngữ nghĩa hợp lệ cho tất cả các hoạt động tiềm ẩn, có thể được trình biên dịch thực hiện hoặc chèn vào. –