मैं एक स्वत: चर के रूप में इसका उपयोग करने से मेरी कक्षा का उपयोगकर्ता को रोकने के लिए चाहते हैं, इसलिए मैं इस तरह कोड लिखने:"= डिफ़ॉल्ट" विनाशक और खाली विनाशक के बीच क्या अंतर है?
class A {
private:
~A() = default;
};
int main() {
A a;
}
मैं उम्मीद करते हैं कि कोड संकलित नहीं किया जाएगा, लेकिन जी ++ त्रुटि के बिना यह संकलित ।
हालांकि, जब मैं करने के लिए कोड बदलने के लिए:
class A {
private:
~A(){}
};
int main() {
A a;
}
अब, जी ++ त्रुटि है कि ~A()
, निजी है के रूप में मेरी उम्मीद है देता है।
"डिफ़ॉल्ट" विनाशक और खाली विनाशक के बीच क्या अंतर है?
जीसीसी का कौन सा संस्करण? –
पढ़ना उदा। [यह विनाशक संदर्भ] (http://en.cppreference.com/w/cpp/language/destructor), अंतर यह है कि उपयोगकर्ता द्वारा प्रदत्त विनाशक (भले ही यह खाली हो) * गैर-तुच्छ * है, और से संदर्भ: "छोटे विनाशकों के साथ ऑब्जेक्ट्स को डिलीट-एक्सप्रेशन की आवश्यकता नहीं होती है और इन्हें बस अपने स्टोरेज को डिलीकेट करके निपटान किया जा सकता है।" –
आपके मामले में कोई अंतर नहीं है, दोनों [gcc4.9 और clang3.5 संकलन करने से इनकार करते हैं] (http://coliru.stacked-crooked.com/a/41976bc03bc12c79) आपका पहला उदाहरण। यह जीसीसी के आपके संस्करण में एक बग होना चाहिए। – Praetorian