2017-08-11 13 views
5

सी ++ में, शब्द पीओडी प्रकार का उपयोग उन प्रकारों का वर्णन करने के लिए किया जाता है जिनमें केवल सादा पुराना डेटा होता है। Quoted from here:क्या जंग में पीओडी प्रकार की अवधारणा है?

एक वर्ग [...] बिना रचनाकारों, विनाशकों और आभासी सदस्यों के कार्यों के।

क्या जंग में एक समान अवधारणा है?

उत्तर

6

त्वरित उत्तर; सी ++ के पीओडी प्रकार ≈ जंग का Copy types

हालांकि, कुछ अन्य, संबंधित अवधारणाएं हैं। आइए उन पर विस्तार से चर्चा करें!


Copy विशेषता सी में शब्द "पॉड प्रकार" के सबसे करीब है ++ और इस प्रकार परिभाषित किया गया है:

प्रकार जिनके मान बिट्स को कॉपी करके बस दोहराया जा सकता है।

"बिट्स की प्रतिलिपि" करके, दस्तावेज़ीकरण मूल रूप से memcpy() का अर्थ है। इसमें सभी प्राइमेटिव प्रकार शामिल हैं, जैसे कि u32, f32, char और bool, लेकिन उपयोगकर्ता परिभाषित प्रकार Copy भी हो सकते हैं।

#[derive(Clone, Copy)] 
struct Point { 
    x: f32, 
    y: f32, 
} 

आप Clone ध्यान दिया होगा:: आमतौर पर विशेषता बस है व्युत्पन्न Clone traitCopy की एक आवश्यकता है और के रूप में परिभाषित किया गया है:

क्षमता स्पष्ट रूप से नकल करने के लिए एक आम विशेषता एक वस्तु।

Clone का कहना है कि एक प्रकार "किसी भी तरह खुद को नकल करने में सक्षम" है और Copy प्रकार कह कर अधिक की आवश्यकता है "बस प्रकार के बिट्स को कॉपी करके ही नकल करने में सक्षम है।"


सी कहा गया है कि पॉड प्रकार "कंस्ट्रक्टर्स, विनाशकर्ता और आभासी सदस्यों कार्यों" शामिल नहीं है का जवाब ++। के जंग के लिए है कि टूट करते हैं:

  • कंस्ट्रक्टर्स: जंग समर्पित निर्माता विधियां नहीं हैं, लेकिन इसके बजाय संबंधित कार्यों (सी में स्थिर तरीकों ++) का उपयोग करता है। प्रत्येक प्रकार, यहां तक ​​कि सभी Copy प्रकारों में, जितना चाहें उतने जुड़े फ़ंक्शन और विधियां हो सकती हैं। जंग में यह वास्तव में "पीओडी" होने की आवश्यकता नहीं है। विशेष रूप से, यहां तक ​​कि जंग के आदिम प्रकारों में भी कई विधियां हैं, जैसे u32::pow()। यह प्रतिबंध जंग पर लागू नहीं होता है।

  • Destructors: जंग में, वस्तुओं Drop विशेषता से drop() फोन करके विलुप्त कर रहे हैं (या बल्कि: drop() स्वचालित रूप से दायरे के अंत में कहा जाता है)। Copy नहीं हो सकते हैं जब वे Drop विशेषता लागू करते हैं! जंग का एक समान प्रतिबंध है।

  • वर्चुअल सदस्य कार्यों: जंग में, आभासी एक समारोह की संपत्ति नहीं है। अधिकांश कार्यों का उपयोग आभासी संदर्भ में किया जा सकता है, यह है: इन्हें गतिशील प्रेषण के साथ उपयोग किया जा सकता है, लेकिन Copy एक गतिशील प्रेषण संदर्भ में उपयोग किए जाने से किसी प्रकार को रोकने से नहीं रोकता है (जंग शब्दों में: विशेषता वस्तु के रूप में उपयोग किया जा रहा है)। यह आंशिक रूप से इस तथ्य के लिए धन्यवाद है कि vptr प्रकार के भीतर संग्रहीत नहीं है, लेकिन ऑब्जेक्ट के पॉइंटर के बगल में (वसा पॉइंटर्स)। यह बिंदु जंग पर लागू नहीं होता है।

संबंधित मुद्दे