है मेरे पास एक वर्ग है।एक वर्ग के लिए कॉपी कन्स्ट्रक्टर/असाइनमेंट ऑपरेटर के साथ त्रुटि जिसमें 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 तरह के मामले में काम नहीं करते है?
पुनश्च: क्योंकि कोई std::atomic<long int>::atomic(const std::atomic<long int>&)
समारोह मैं जीसीसी संस्करण 4.6.3
क्या आप एक संकलित कोड उदाहरण को संपादित और जोड़ सकते हैं? मैं इस समस्या को हल करने में असफल रहा, मैंने कोशिश की है: 'अनुक्रम और ऑपरेटर = (कॉन्स अनुक्रम और अन्य) {value_ = other.value_.load(); वापसी * यह; } ' –
@VictorLamoine: कोई विचार नहीं कि आपने क्या किया, लेकिन सामान्य दृष्टिकोण [काम करता है] (https://wandbox.org/permlink/ZsHPDqhrIiybq7qf)। –
इस बारे में अधिक जानकारी के लिए कि आप वास्तव में एक प्रति-निर्माता (स्रोत को लोड करने के लिए डिफ़ॉल्ट 'seq_cst' के साथ कैसे लिख सकते हैं, लेकिन फिर निर्माणाधीन वस्तु में एक परमाणु स्टोर की लागत से परहेज करते हैं), देखें [परमाणु सदस्य के साथ कक्षाओं के लिए कन्स्ट्रक्टर कॉपी करें ] (https://stackoverflow.com/questions/19961043/copy-constructor-for-classes-with-atomic-member/46045691#46045691)। सुनिश्चित करें कि यह वास्तव में आप कार्यान्वित करना चाहते हैं; परमाणुओं के आसपास प्रतिलिपि आमतौर पर साझा राज्य के रूप में उनके उद्देश्य के विपरीत होती है। –