शीर्षक में। इस प्रश्न में शायद पहले से ही एक जवाब है लेकिन मैं एक खोजने में विफल रहा।कच्चे सूचक और weak_ptr के बीच क्या अंतर है?
उत्तर
एक नग्न संकेतक और एक weak_ptr
के बीच मौलिक वैचारिक अंतर यह है कि अगर वस्तु नष्ट हो जाता है की ओर इशारा किया, नग्न सूचक इसके बारे में आपको बता नहीं जाएगा। इसे एक लटकते पॉइंटर कहा जाता है: किसी ऑब्जेक्ट के लिए पॉइंटर जो मौजूद नहीं है। वे आमतौर पर ट्रैक करने के लिए मुश्किल हैं।
weak_ptr
होगा। आदेश में एक weak_ptr
का उपयोग करने के लिए, आपको पहले यह एक shared_ptr
में परिवर्तित करना होगा। और यदि shared_ptr
कुछ भी इंगित नहीं करता है, तो ऑब्जेक्ट हटा दिया गया था।
उदाहरण के लिए:
#include <iostream>
#include <memory>
std::weak_ptr<int> wp;
void test()
{
auto spt = wp.lock(); // Has to be copied into a shared_ptr before usage
if (spt) {
std::cout << *spt << "\n";
} else {
std::cout << "wp is expired\n";
}
}
int main()
{
{
auto sp = std::make_shared<int>(42);
wp = sp;
test();
}
test();
}
आउटपुट
42
wp is expired
एक कच्चा सूचक (कम से कम सामान्यतः) केवल एक पता है। आप पॉइंटर से पर पर जो कुछ भी इंगित करते हैं, उसके बारे में कुछ भी नहीं बता सकते हैं।
एक weak_ptr
हमेशा एक shared_ptr
साथ जुड़ा हुआ है, तो हम शायद एक shared_ptr
के साथ शुरू करने के लिए एक weak_ptr
का कोई मतलब की जरूरत है।
ए shared_ptr
संदर्भ गिना जाता है, इसलिए यह किसी ऑब्जेक्ट में कितने संदर्भ (पॉइंटर्स) मौजूद है, इसका ट्रैक रखता है, और ऑब्जेक्ट को स्वचालित रूप से नष्ट कर देता है जब उस ऑब्जेक्ट का कोई और संदर्भ मौजूद नहीं होता है।
जैसा कि मैंने पहले ही कहा है, weak_ptr
shared_ptr
से जुड़ा हुआ है। shared_ptr
के विपरीत, weak_ptr
का अस्तित्व पॉइंट ऑब्जेक्ट के लिए संदर्भ गणना को बढ़ाता है। weak_ptr
का उपयोग करने के लिए, आपको पहले इसे shared_ptr
में परिवर्तित करना होगा। यदि वर्तमान संदर्भ गिनती सकारात्मक है, कि सफल होगा, औरweak_ptr
एक shared_ptr
को बदलने संदर्भ संख्या में भी वृद्धि दर्शाता है कि परिवर्तित सूचक वस्तु के लिए एक 'असली' संदर्भ है जाएगा। यदि, दूसरी ओर, संदर्भ गणना पहले से ही शून्य है (जिसका मतलब है कि पॉइंटी ऑब्जेक्ट पहले ही नष्ट हो चुका है)को shared_ptr
में कनवर्ट करने का प्रयास बस असफल हो जाएगा।
ए shared_ptr
का मतलब पॉइंट ऑब्जेक्ट का साझा स्वामित्व है। pointee वस्तु के रूप में लंबे समय तक अस्तित्व में रहने के रूप में उस वस्तु को कम से कम एक shared_ptr मौजूद है, लेकिन जैसे ही पिछले shared_ptr
वस्तु को नष्ट कर दिया है, इसलिए pointee वस्तु होगा होगा।
ए weak_ptr
का मतलब पॉइंट ऑब्जेक्ट तक पहुंच रहित नहीं है। ऑब्जेक्ट मौजूद होने पर यह एक्सेस की अनुमति देता है। यदि वस्तु नष्ट हो गई है, तो यह आपको बताती है कि नष्ट वस्तु का उपयोग करने के बजाय पॉइंट ऑब्जेक्ट अब मौजूद नहीं है।
- 1. शून्य सूचक और शून्य सूचक के बीच क्या अंतर है?
- 2. "कच्चे HTTP शीर्षलेख" क्या है? "HTTP शीर्षलेख" और "कच्चे HTTP शीर्षलेख" के बीच क्या अंतर है?
- 3. प्रतिनिधि उदाहरण और विधि सूचक के बीच क्या अंतर है?
- 4. कॉन्स के बीच अंतर। सूचक और संदर्भ?
- 5. चरित्र सरणी और सूचक के बीच अंतर
- 6. एक कच्चे सूचक प्रोटोटाइप
- 7. एक शून्य सूचक और एक पूर्ण सूचक के बीच क्या अंतर है?
- 8. file_get_contents और fread बीच क्या अंतर है
- 9. एक अनबाउंड वाइल्डकार्ड और कच्चे प्रकार के बीच अंतर
- 10. कच्चे पॉइंटर
- 11. जोर से :: device_vector कच्चे सूचक और वापस?
- 12. [अपरिभाषित] और [,] के बीच क्या अंतर है?
- 13. # {} $ {} और% {} के बीच क्या अंतर है?
- 14. `&` और `ref` के बीच क्या अंतर है?
- 15. $ और $$ के बीच क्या अंतर है?
- 16. के बीच क्या अंतर है:। और: आर !?
- 17. वेरिलोग के बीच क्या अंतर है! और ~?
- 18. भिन्नता और '-' के बीच क्या अंतर है?
- 19. क्या $ @ और "$ @" के बीच कोई अंतर है?
- 20. * और * के बीच क्या अंतर है?
- 21. "$^एन" और "$ +" के बीच क्या अंतर है?
- 22. लटकने वाले सूचक और मेमोरी रिसाव के बीच अंतर
- 23. shared_ptr और weak_ptr रूपांतरण
- 24. फ़ाइल डिस्क्रिप्टर और फ़ाइल पॉइंटर के बीच क्या अंतर है?
- 25. char * s [] और char (* s) [] के बीच क्या अंतर है?
- 26. ओरेकल में लंबे और लंबे कच्चे डेटा प्रकारों के बीच क्या अंतर है?
- 27. सरणी और सरणी के बीच क्या अंतर है?
- 28. शून्य * और शून्य ** के बीच क्या अंतर है?
- 29. के बीच क्या अंतर है?
- 30. अंतर और कहां के बीच क्या अंतर है?
तुम कुछ वैध करने के लिए अगर एक weak_ptr अंक देख सकते हैं। आप कच्चे सूचक के साथ ऐसा नहीं कर सकते हैं। – juanchopanza
यह शायद बेहतर अगर आप [यहां] (http://en.cppreference.com/w/cpp/memory/weak_ptr) देखने के लिए और सभी मतभेदों को खुद देखते हैं। कोई भी अंतर नहीं है, बहुत सारे हैं। – juanchopanza