2009-08-14 10 views
8

मैं documentation.क्यूटी 4.5 - क्यूलिस्ट :: क्यूलिस्ट (कॉन्स क्यूलिस्ट और) - क्या यह एक गहरी प्रतिलिपि है?

QList :: QList (स्थिरांक QList & अन्य) अन्य की एक प्रति निर्माणों द्वारा QList प्रतिलिपि निर्माता के बारे में उलझन हो रही है।

यह ऑपरेशन निरंतर समय लेता है, क्योंकि QList को पूरी तरह से साझा किया जाता है। यह फ़ंक्शन से बहुत तेजी से QList लौटाता है। यदि कोई साझा उदाहरण संशोधित किया गया है, तो यह कॉपी किया जाएगा (कॉपी-ऑन-राइट), और रैखिक समय लेता है।

फिर पूर्ण रूप से साझा होने के लिंक पर, यह संदर्भ गणना और प्रतिलिपि लिखने के बारे में बात करता है। क्या यह एक गहरी प्रति है या सिर्फ एक उथली प्रतिलिपि है?

उत्तर

5

यह एक उथली प्रति है। पहली बार जब आप प्रतिलिपि या मूल सूची पर गैर-कॉन्स्ट फ़ंक्शन को कॉल करते हैं तो दृश्यों के पीछे डेटा की एक गहरी प्रति होती है।

+0

... या मूल सूची में! असल में, किसी भी समय सूची डेटा बदल दिया जाएगा, एक गहरी प्रति बनाई गई है। – Thomi

+0

ओह, ज़ाहिर है! धन्यवाद, मैंने उन लोगों को भ्रम से बचने के लिए अपना जवाब संपादित किया जो टिप्पणियां नहीं पढ़ते हैं। – rohanpm

+0

बस अनुवर्ती करना चाहते हैं कि मैंने गलती की - यदि आपके पास पॉइंटर्स का क्यूलिस्ट या क्यूवीक्टर है, तो डिफ़ॉल्ट गहरी प्रतिलिपि निर्माता से अपेक्षा न करें कि उन बिंदुओं के बारे में नए उदाहरण बनाने में आपकी सहायता करें ... – Extrakun

-2

AFAIK, सामग्री (लिखने पर) की प्रतिलिपि करते समय, यह सूची में प्रत्येक तत्व की प्रतिलिपि बनाता है, जैसे std :: सूची के मामले में।

3

यह ऑपरेशन निरंतर समय लेता है, क्योंकि QList को पूरी तरह से साझा किया जाता है।

यदि आप सूची को संशोधित नहीं करते हैं, तो वे साझा किए जाते हैं! तो दृश्य के पीछे, आप एक ही पते पर सूचनाओं को पढ़ते हैं!

एक साझा उदाहरण संशोधित किया गया है, तो यह की नकल की हो जाएगा (कॉपी-ऑन-राइट), और कि रैखिक समय लगता है।

लेकिन यदि आप प्रतिलिपि सूची संशोधित करते हैं, तो कोई अन्य विकल्प नहीं है जो प्रभावी ढंग से सूची की प्रतिलिपि बनाता है! और इसलिए, आपके पास सूची आकार के आधार पर एक रैखिक लागत है।

from qt doc on copy on write and shared memory :

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

तो यदि आप सूची को संशोधित नहीं करते हैं तो आप उसी पते पर जानकारी पढ़ते हैं जो पैरामीटर के रूप में दी गई सूची है, इसे उथली प्रतिलिपि कहा जाता है। और यदि आप इसे संशोधित करते हैं, तो आपके पास सूची की गहरी प्रतिलिपि होगी।

2

कॉपी कन्स्ट्रक्टर एक तेज (उथली) प्रतिलिपि करता है। यदि आप या तो मूल सूची या इसकी प्रतिलिपि संशोधित करते हैं, तो डेटा की एक गहरी प्रतिलिपि बनाई जाएगी।

यदि आप किसी भी संदेह में हैं, तो मेरा सुझाव है कि आप कॉपी-ऑन-राइट सेमेन्टिक्स पर डॉक्यूमेंटेशन दोबारा पढ़ लें।

यह क्यूस्ट्रिंग, क्यूलिस्ट, क्यूएरे और कई अन्य क्यूटी वर्गों के समान व्यवहार है।

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