2010-10-06 8 views
10

इन दो प्रकार के पॉइंटर्स के बीच क्या अंतर है? जहां तक ​​मैं पढ़ सकता हूं, QSharedPointer स्थिति को अच्छी तरह से संभाल सकता है, तो QSharedDataPointer की आवश्यकता क्या है?QSharedPointer और QSharedDataPointer के बीच अंतर?

उत्तर

5

क्यूटी प्रलेखन QSharedDataPointer

QSharedDataPointer वर्ग से एक परोक्ष साझा वस्तु के लिए सूचक का प्रतिनिधित्व करता है। QSharedDataPointer आपके स्वयं के अंतर्निहित साझा कक्षाओं को आसान बनाता है। QSharedDataPointer लागू थ्रेड-सुरक्षित संदर्भ गिनती, यह सुनिश्चित करना कि आपके पुनर्विक्रेता कक्षाओं में QSharedDataPointers जोड़ना, उन्हें गैर-पुनर्वित्त नहीं देगा। कक्षाओं के उपयोग की आसानी के साथ पॉइंटर्स की स्मृति दक्षता और मेमोरी दक्षता को गठबंधन करने के लिए कई Qt कक्षाओं द्वारा लागू साझाकरण का उपयोग किया जाता है। अधिक जानकारी के लिए साझा कक्षा पृष्ठ देखें।

उदाहरण उपयोग -

#include <QSharedData> 
#include <QString> 

class EmployeeData : public QSharedData 
{ 
    public: 
    EmployeeData() : id(-1) { } 
    EmployeeData(const EmployeeData &other) 
     : QSharedData(other), id(other.id), name(other.name) { } 
    ~EmployeeData() { } 

लिए QSharedPointer

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

> QSharedPointer<MyObject> obj = 
>   QSharedPointer<MyObject>(new MyObject); 

तो, QSharedDataPointer implicititly साझा कक्षाएं बनाने बनाने के लिए प्रयोग किया जाता है। जबकि QSharedPointer स्मार्ट पॉइंटर की गणना करने वाला एक संदर्भ है जो कक्षाओं को इंगित करता है।


संपादित

जब Memory management in Qt? पढ़ने, मैं इस लिंक http://labs.qt.nokia.com/2009/08/25/count-with-me-how-many-smart-pointer-classes-does-qt-have/ पाया। क्यूटी के विभिन्न स्मार्ट पॉइंटर्स की वास्तव में उत्कृष्ट चर्चा है (वर्तमान एपीआई 8 है)।

+0

मुझे लगता है कि मुझे एक बिंदु याद आ रही है; जहां तक ​​मैं पढ़ सकता हूं, हम QSharedDataPointer के साथ कर्मचारी उदाहरण को लागू कर सकते हैं, पहले से ही QSharedPointer के साथ। क्या चालबाजी है? –

+4

QSharedDataPointer कक्षा के कई उदाहरणों के बीच कक्षा डेटा के डेटा को साझा करने के लिए उथली प्रतिलिपि लागू करने के लिए है। संदर्भ दस्तावेज़ क्लास विरासत QSharedDataPointer दिखाता है। तो यह कक्षा के लिए आंतरिक है। QSharedPointer कक्षा के लिए एक बाहरी है और एक वर्ग के एक उदाहरण के लिए एक संदर्भ गिनती सूचक लागू करता है। इसलिए यह एकाधिक पॉइंटर्स को एक ही कक्षा के उदाहरण को इंगित करने की अनुमति देता है। –

+1

QSharedDataPointer कॉपी-ऑन-राइट को कार्यान्वित करने और अपने ऑब्जेक्ट को कॉपी करने के लिए एक निफ्टी तरीका है जब इसे गैर-कॉन्स तरीके से एक्सेस किया जाता है। इसमें सीमा है कि टेम्पलेट तर्क को QSharedData से प्राप्त करने की आवश्यकता है। –

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