2015-11-07 7 views
8

का मेमोरी पदचिह्न unique_ptr उदाहरण (कस्टम डिलीटर के बिना) में एक ही मेमोरी पदचिह्न कच्चे सूचक के रूप में होता है या एक सूचक को सिर्फ सूचक से अधिक स्टोर करता है? , तोunique_ptr

sizeof (unique_ptr) = 8

इस के तहत:

+2

यह एक बहुत ही कार्यान्वयन-विशिष्ट प्रश्न है, और इस तरह विभिन्न मानक पुस्तकालयों के बीच काफी अंतर हो सकता है। लेकिन एक साधारण जांच के लिए कच्चे सूचक की जांच और तुलना करने के लिए 'sizeof' का उपयोग क्यों न करें? –

+1

@ जोचिमपिलबोर्ग क्योंकि मैंने सोचा था कि भविष्य में अन्य लोगों का भी यही प्रश्न हो सकता है। अच्छी बात। तकनीकी रूप से मुझे यह पूछना चाहिए था: "क्या यह संभव है * एक अद्वितीय स्मृति पदचिह्न के साथ 'अद्वितीय_पीआरआर' को लागू करने के लिए एक कच्चे सूचक के रूप में लागू करें" क्योंकि संभवतः कार्यान्वयन संभवतः ऐसा करेगा। – Museful

+0

उत्तर यहां है: http://stackoverflow.com/a/13460653/2183287 –

उत्तर

7

@JoachimPileborg, सुझाव दिया जीसीसी 4.8 (64) इस कोड को

std::cout << "sizeof(unique_ptr) = " << sizeof(std::unique_ptr<int>) << '\n'; 

के साथ इस उत्पादन का उत्पादन कार्यान्वयन, उत्तर हाँ है।

यह आश्चर्यजनक नहीं है: सब के बाद, unique_ptrसुविधाओंके लिए कच्चे संकेत (। उदा shared_ptr के रूप में एक काउंटर है वास्तव में, यदि मैं sizeof(shared_ptr<int>) परिणाम प्रिंट इस समय 16 है) नहीं जोड़ता है। unique_ptr पॉइंटर्स प्रबंधन के कुछ पहलुओं के बारे में आपकी देखभाल करता है।

वैसे, एक unique_ptr कच्चे से अलग होने के कारण, उत्पन्न कोड एक या दूसरे का उपयोग करते समय अलग होगा। विशेष रूप से, एक unique_ptr अगर अपने कोड में क्षेत्र से बाहर चला जाता है, संकलक कि विशेष रूप से विशेषज्ञता के नाशक के लिए कोड उत्पन्न हो जाएगा और यह उपयोग कि हर बार कोड उस प्रकार के unique_ptr नष्ट हो जाएगा (और वह यह है कि बिल्कुल आप क्या चाहते हैं)।