त्वरित उत्तर; सी ++ के पीओडी प्रकार ≈ जंग का 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 प्रकार के भीतर संग्रहीत नहीं है, लेकिन ऑब्जेक्ट के पॉइंटर के बगल में (वसा पॉइंटर्स)। यह बिंदु जंग पर लागू नहीं होता है।
स्रोत
2017-08-11 11:26:58