यह जानने के लिए कि चाल शब्दार्थ क्या है?


नमस्ते, वास्तव में मैं चाल शब्दार्थ के बारे में समझने की कोशिश कर रहा हूं, बात यह है कि व्यावहारिक रूप से मुझे सिद्धांत समझ में नहीं आ रहा है। केवल एक संदेह यह है कि मूव कंस्ट्रक्टर में मूव सिमेंटिक्स कैसे चलता है, मैं मूव फ़ंक्शन का उपयोग कर रहा हूं, सिद्धांत कहता है कि स्वामित्व को किसी अन्य संसाधन में स्थानांतरित करने का मतलब है कि कॉपी कंस्ट्रक्टर सही कॉल करेगा। मुझे नहीं पता कि मूव कंस्ट्रक्टर कैसे काम करेगा, वैसे भी इसे राइट कॉपी करने की जरूरत है। तो, मेरी मदद करें कि मूव सिमेंटिक्स कैसे काम करता है और मूव कंस्ट्रक्टर के बाद ऑब्जेक्ट के पते की जानकारी कृपया गहराई से बताएं।

मैंने क्या प्रयास किया है:

कुछ शंका होने पर चाल शब्दार्थ नट के बारे में समझने का प्रयास किया।

समाधान 1

चाल शब्दार्थ को समझने के लिए, सबसे पहले आपको यह समझना होगा कि एक अस्थायी वस्तु क्या है। अर्थात्, कोई भी वस्तु तुरंत बनाई जाती है और फिर तुरंत त्याग दी जाती है:

सी++
class A{/*assume it has functionality*/};

A a; // Solid object
A a1 = A(/* constructor parameter(s)*/); // Where as a1 is solid, the RValue assignment is a temporary objest which is when discarded triggers destructor semanticts

तो मूव सिमेंटिक्स कहता है कि A() को a1 में ले जाएं, इसमें कोई नकल नहीं है जैसे कि 2 ऑब्जेक्ट अस्थायी रूप से मेमोरी पर कब्जा कर रहे हैं।

यह मूव सिमेंटिक्स के बिना भी काम कर सकता है, बशर्ते कि उचित कॉपी कंस्ट्रक्टर और असाइनमेंट लागू किए गए हों। लेकिन चाल शब्दार्थ अनावश्यक प्रतियों को समाप्त कर देता है, मान लीजिए यदि वस्तु आकार में बड़ी है।

समाधान 2

मैं अपने एक लेख में चाल शब्दार्थ को कवर करता हूँ

[^]

मूव सिमेंटिक्स मूल रूप से किसी वस्तु की आंतरिक स्थिति को सही परिस्थितियों में किसी अन्य वस्तु में ‘स्थानांतरित’ करता है, जिससे एक नई वस्तु बनाने और उसकी स्थिति की प्रतिलिपि बनाने की आवश्यकता से बचा जा सकता है।

यह संकलक है जो संकलन के दौरान इसका निर्धारण करेगा। यह आपके असाइनमेंट को देखता है और इस आधार पर कि क्या यह कुछ वैरिएबल को ‘अस्थायी’ मानता है, यह कॉपी कंस्ट्रक्टर के माध्यम से जाने के बिना अस्थायी वैरिएबल की आंतरिक स्थिति को आपके लक्ष्य मान में ‘स्थानांतरित’ कर सकता है।

हालाँकि ध्यान दें कि यह हमेशा सुरक्षित नहीं होता है। गलत तरीके से लागू किया गया, इससे मेमोरी लीक हो सकती है यदि लक्ष्य ऑब्जेक्ट ओवरराइट होने से पहले अपने आंतरिक संसाधनों को ठीक से त्याग नहीं करता है।

コメント

タイトルとURLをコピーしました