我有一個像下面這樣的類。具有std :: atomic成員變量的類的複製構造函數/賦值運算符的錯誤
#include <atomic>
static const long myValue = 0;
class Sequence
{
public:
Sequence(long initial_value = myValue) : value_(initial_value) {}
private:
std::atomic<long> value_;
};
int main()
{
Sequence firstSequence;
Sequence secondSequence = firstSequence;
return 0;
}
我越來越喜歡這個編譯錯誤,
test.cpp:21:36: error: use of deleted function ‘Sequence::Sequence(const Sequence&)’
test.cpp:5:7: error: ‘Sequence::Sequence(const Sequence&)’ is implicitly deleted because the default definition would be ill-formed:
test.cpp:5:7: error: use of deleted function ‘std::atomic<long int>::atomic(const std::atomic<long int>&)’
是默認的拷貝構造函數和賦值opertaor不要在這種情況下工作嗎?
PS:我使用的gcc版本4.6.3
你能編輯和添加一個編譯代碼的例子嗎?我沒有解決這個問題,我試過了: '序列&operator =(const序列&其他){value_ = other.value_.load();返回*這個; }' – 2017-09-28 20:50:14
@VictorLamoine:不知道你做了什麼,但一般的做法[作品](https://wandbox.org/permlink/ZsHPDqhrIiybq7qf)。 – 2017-09-28 21:35:18
有關如何實際編寫複製構造函數(使用默認的'seq_cst'來加載源代碼,但是避免將原子庫存儲到正在構建的對象中的代價)的詳細信息,請參閱[使用原子成員的類的複製構造函數](https://stackoverflow.com/questions/19961043/copy-constructor-for-classes-with-atomic-member/46045691#46045691)。確保這真的是你想要實現的;複製原子通常與共享狀態的目的相反。 – 2017-10-13 01:34:14