Giả sử tôi có lớp sau:Tiếp cận chưa được khởi tạo biến tư nhân nguyên tử trong C++
class A
{
public:
...
...
void incrementN() {++n_;}
uint64_t getN() {return n_;}
private:
std::atomic<uint64_t> n_;
...
...
};
Giả sử rằng tôi khởi tạo tất cả các biến khác trong lớp, trừ n_
và rằng đây không phải là thread lưu trữ địa phương, do đó, không khởi tạo bằng không.
Tôi tạo đối tượng của lớp A và tiếp tục gọi số incrementN()
.
Nếu tại một thời điểm nào đó tôi muốn giá trị n_
và tôi gọi getN()
, điều này có thể gây ra quy trình load()
cho nguyên tử n_
bị lỗi không?
Bạn có một 'constructor mặc định A', hoặc bất kỳ' A' constructor ở tất cả? Nếu bạn không có bất kỳ constructors nào, hoặc một constructor mặc định ('A() = default;') thì trình biên dịch tạo ra constructor mặc định sẽ gọi hàm khởi tạo mặc định của tất cả các thành viên không tĩnh ([reference] (http: // vi .cppreference.com/w/cpp/language/default_constructor)) và ['std :: constructor mặc định nguyên tử] (http://en.cppreference.com/w/cpp/atomic/atomic/atomic) sẽ là gọi là. –
Có, tôi có một hàm tạo cho A, và nó khởi tạo các biến khác của A nhưng không khởi tạo 'n_' – user1715122
@JoachimPileborg n_ là khởi tạo mặc định, đối tượng được xây dựng, giá trị của nó không được chỉ định, vì vậy nó không phải UB. – Rost