हां, एक विशेष सदस्य फ़ंक्शन एक .cpp फ़ाइल में डिफ़ॉल्ट-परिभाषित आउट-ऑफ़-लाइन हो सकता है। यह समझकर कि ऐसा करने से, इनलाइन-डिफॉल्ट फ़ंक्शन के कुछ गुण आपकी कक्षा पर लागू नहीं होंगे। उदाहरण के लिए, यदि आपकी प्रतिलिपि निर्माता डिफ़ॉल्ट रूप से परिभाषित है, तो आपकी कक्षा को तुलनीय रूप से कॉपी करने योग्य नहीं माना जाएगा (जो इसे पीओडी के रूप में पहचाने जाने से भी अयोग्य घोषित करता है)। इसी तरह, एक डिफ़ॉल्ट परिभाषित आउट ऑफ़ लाइन विनाशक आपके प्रकार को तुच्छ (या पीओडी) से अयोग्य घोषित कर देगा।
यह उपयोगी हो सकता है यदि आप एक गैर-इनलाइन कॉपी-कन्स्ट्रक्टर और इसे परिभाषित करने के लिए नियंत्रित करना चाहते हैं (शायद जेनरेट की गई टेम्पलेट परिभाषाओं पर नियंत्रण लेने के लिए), लेकिन मैन्युअल रूप से इसे परिभाषित नहीं करना चाहते हैं खुद को एक हाथ से तैयार सदस्य-प्रारंभिक सूची के साथ, जो श्रमिक होगा और रखरखाव के तहत बाँध सकता है।
स्रोत
2013-01-16 01:18:04
यह ठीक है, मानक भी इसे एक उदाहरण ('§8.4.2/3') में उपयोग करता है। '= default' और' = delete' केवल "सामान्य" फ़ंक्शन निकाय हैं (spec के अनुसार, वैसे भी), यानी आप * परिभाषा * में क्या लिखेंगे। – Xeo
ध्यान दें कि फ़ंक्शन की पहली घोषणा के बाद एक डिफ़ॉल्ट परिभाषा प्रकट हो सकती है जबकि हटाए गए परिभाषा को फ़ंक्शन की पहली घोषणा होना चाहिए। – MWid
@Xeo एक उत्तर की तरह लगता है। –