मुझे जीसीसी से एक अजीब त्रुटि मिल रही थी और क्यों नहीं पता लगाया जा सकता है। समस्या को और स्पष्ट करने के लिए मैंने निम्नलिखित उदाहरण कोड बनाया है। असल में, एक वर्ग परिभाषित किया गया है, जिसके लिए मैं गलती से कॉल करने से रोकने के लिए अपनी प्रतिलिपि बनाने वाला और कॉपी असाइनमेंट ऑपरेटर निजी बनाता हूं।वेक्टर :: push_back कॉपी कन्स्ट्रक्टर का उपयोग करने पर जोर देता है हालांकि एक चालक कन्स्ट्रक्टर प्रदान किया जाता है
#include <vector>
#include <cstdio>
using std::vector;
class branch
{
public:
int th;
private:
branch(const branch& other);
const branch& operator=(const branch& other);
public:
branch() : th(0) {}
branch(branch&& other)
{
printf("called! other.th=%d\n", other.th);
}
const branch& operator=(branch&& other)
{
printf("called! other.th=%d\n", other.th);
return (*this);
}
};
int main()
{
vector<branch> v;
branch a;
v.push_back(std::move(a));
return 0;
}
मैं इस कोड को संकलित करने की उम्मीद है, लेकिन यह जीसीसी के साथ विफल रहता है। असल में जीसीसी शिकायत करता है कि "शाखा :: शाखा (कॉन्स शाखा &) निजी है", जैसा कि मुझे समझ में नहीं आना चाहिए।
असाइनमेंट ऑपरेटर, काम करता है के बाद से अगर मैं
branch a;
branch b;
b = a;
के साथ) मुख्य के शरीर (की जगह यह संकलन और अपेक्षा के अनुरूप चलेंगे।
क्या यह जीसीसी का सही व्यवहार है? यदि हां, तो उपर्युक्त कोड में क्या गलत है? कोई भी सुझाव मेरे लिए सहायक है। धन्यवाद!
मेरे लिए जीसीसी-4.6.1 के साथ काम करता है। –
मैं जीसीसी 4.7.1-2 का उपयोग कर रहा था। मैं 4.6.1 कोशिश करूंगा। धन्यवाद! – BreakDS
एन 3242 के पढ़ने के बाद, इस कोड को अनुमति दी जानी चाहिए (लेकिन यदि चालक कन्स्ट्रक्टर अपवाद फेंकता है, तो प्रोग्राम में अपरिभाषित व्यवहार होता है)। – aschepler