इस प्रोग्राम में क्या गलत है?
#include & lt; स्मृति & gt; # शामिल करें & lt; vector & gt; Int main () {std :: vector & lt; std :: unique_ptr & lt; int & gt; & gt; vec; Int x (1); std :: unique_ptr & LT; पूर्णांक & gt; ptr2x (& amp; एक्स); vec.push_back (ptr2x); // इस छोटे आदेश में एक विचित्र त्रुटि है वापसी 0; } त्रुटि:
$ g ++ -std = gnu ++ 0x main.cpp फ़ाइल में शामिल है c: \ mingw \ bin \ .. /lib/gcc/mingw32/4.5.0/include/c++/mingw32/bits/c++ allocator.h: 34: 0, से c: \ mingw \ bin \ ../ lib / gcc / mingw32 / 4.5। 0 / include / c + + / bits / allocator.h: 48, c.c: \ mingw \ bin \ ../ lib / gcc / mingw32 / 4.5.0 / include / c + + / memory: 64 से, main.cpp से: 6: c: \ MinGW \ बिन \ ../ lib / जीसीसी / mingw32 / 4.5.0 / शामिल / c ++ / बिट्स / unique_ptr.h: मैं 'सदस्य समारोह n शून्य __gnu_cxx :: new_allocator & LT; _Tp & gt; :: निर्माण (_Tp *, Const _Tp & amp;) [_Tp = std :: unique_ptr & lt; int & gt ;, _Tp * = std :: unique_ptr & lt; 'Gtc: suffix = _Tp, _Alloc & gt; :: push_back (सेंट VALUE_TYPE & amp चुनाव;) [साथ _Tp = std :: unique_ptr & LT; पूर्णांक & gt ;, _Alloc = std :: alloca टो & LT; std :: unique_ptr & LT; पूर्णांक & gt; & Gt ;, value_type = std :: unique_ptr & lt; int & gt;] 'main.cpp: 16: 21: यहां से शुरू किया गया है c: \ mingw \ bin \ ../ lib / gcc / mingw32 / 4.5.0 / include / c ++ / bits /unique_ptr.h:20 7: 7: त्रुटि: नष्ट कर दिया समारोह 'std :: unique_ptr & LT; _Tp, _Tp_Deleter & gt; :: uniqu e_ptr (स्थिरांक std :: unique_ptr & LT; _Tp, _Tp_Deleter & gt; & amp;) [साथ _Tp = पूर्णांक, _Tp_D eleter = Std :: default_delete & lt; int & gt ;, std :: unique_ptr & lt; _Tp, _Tp_Deleter & gt; = Std :: unique_ptr & lt; int & gt;] 'c: \ mingw \ bin \ ../ lib / gcc / mingw32 / 4.5.0 / include / c ++ / ext / new_allocator.h: 105: 9: त्रुटि: यहां उपयोग में फ़ाइल C: \ mingw \ bin \ ../ lib / gcc / mingw32 / 4.5.0 / include / c + + / vector से शामिल: 69: 0, main.cpp से: 7: c: \ mingw \ bin \ ../ lib / जीसीसी / mingw32 / 4.5.0 / शामिल / c ++ / बिट्स / unique_ptr.h: मैं सदस्य समारोह 'शून्य std :: वेक्टर के & lt n; _Tp, _Alloc & gt; :: _ M_insert_aux (std :: v Ector & LT; _Tp, _Alloc & gt ;: : इटरेटर, _Args & amp; & amp; ...) [_Args = साथ {स्थिरांक std :: यू nique_ptr & LT; पूर्णांक & gt; & amp;}, _Tp = std :: unique_ptr & LT; पूर्णांक & gt ;, _Alloc = std :: संभाजक & LT; std :: unique_ptr & LT; पूर्णांक & gt; & Gt ;, std :: वेक्टर & LT; _Tp, _Alloc & gt; :: iterator = __gnu_cxx :: __ normal_iterator & LT; std :: unique_ptr & LT; पूर्णांक & gt; *, std :: वेक्टर & LT; std :: unique_ptr & LT; पूर्णांक & gt; & Gt; & Gt ;, typename std :: वेक्टर & LT; _Tp, _Alloc & gt; :: _ बेस :: _ Tp_alloc_type :: पी ointer = std :: unique_ptr & LT; पूर्णांक & gt; *] ': c: \ MinGW \ बिन \ ../ lib / जीसीसी / mingw32 /4.5.0/include/c++/bits/stl_vector.h:74 9: 4: 'से शून्य std :: वेक्टर के & lt instantiated; _Tp, _Alloc & gt; :: push_back (सेंट VALUE_TYPE & amp चुनाव;) [साथ _Tp = std :: unique_ptr करें & lt ; एट एंड जी ;, एएलएलओक = एसटीडी :: एलोॉक टॉर & lt; std :: unique_ptr & lt; int & gt; & Gt ;, value_type = std :: unique_ptr & lt; int & gt;] 'main.cpp: 16: 21: यहां से शुरू किया गया है c: \ mingw \ bin \ ../ lib / gcc / mingw32 / 4.5.0 / include / c ++ / bits /unique_ptr.h:20 7: 7: त्रुटि: नष्ट कर दिया समारोह 'std :: unique_ptr & LT; _Tp, _Tp_Deleter & gt; :: uniqu e_ptr (स्थिरांक std :: unique_ptr & LT; _Tp, _Tp_Deleter & gt; & amp;) [साथ _Tp = पूर्णांक, _Tp_D eleter = Std :: default_delete & lt; int & gt ;, std :: unique_ptr & lt; _Tp, _Tp_Deleter & gt; = Std :: unique_ptr & lt; int & gt;] 'c: \ mingw \ bin \ ../ lib / gcc / mingw32 / 4.5.0 / include / c ++ / bits / vector.tcc: 314: 4: त्रुटि: यहां उपयोग किया गया
आपको इसे स्थानांतरित करने की आवश्यकता है:
vec.push_back (std :: चाल (ptr2x));
<कोड> unique_ptr गारंटी देता है कि एक भी unique_ptr कंटेनर आयोजित सूचक का स्वामित्व है। इसका अर्थ है कि आप unique_ptr की प्रतियां नहीं बना सकते (क्योंकि तब दो unique_ptr s में स्वामित्व होगा), ताकि आप इसे केवल स्थानांतरित कर सकें।
ध्यान दें, हालांकि, कि unique_ptr का आपका वर्तमान उपयोग गलत है आप इसका उपयोग स्थानीय चर में एक सूचक को प्रबंधित करने के लिए नहीं कर सकते। एक स्थानीय चर के जीवनकाल स्वचालित रूप से प्रबंधित किया जाता है स्थानीय चर नष्ट कर रहे हैं जब ब्लॉक समाप्त होता है (उदाहरण के लिए, जब समारोह, इस मामले में रिटर्न)। आपको गतिशील रूप से वस्तु आवंटित करने की आवश्यकता है:
std :: unique_ptr & lt; int & gt; पीटीआर (नया इंट (1));
Comments
Post a Comment