c++ - smart pointer the element of a std::pair -


मेरे पास एक फ़ंक्शन है जो std :: pair & lt; objectA *, objectB * & gt; । फ़ंक्शन के प्रलेखन कहते हैं कि यह मेरी जिम्मेदारी है कि वह दो तत्वों को निरुपित करे। अब मैं बस कर रहा हूं:

  {std :: pair}; ऑब्जेक्ट ए *, ऑब्जेक्ट बी * & gt; जोड़ा; ... अगर (शर्त) {the_pair.first हटाएं; हटाएँ_पएयर.सेकंड; वापसी; } ... the_pair.first हटाएं; हटाएँ_पएयर.सेकंड; }  

जब the_pair दायरे से बाहर हो जाता है तो मैं दो तत्वों को हटाने के लिए स्मार्ट पॉइंटर का उपयोग कैसे कर सकता हूं?

अगर मैं सही ढंग से समझता हूं, तो कॉलर हटाने के लिए कॉलर की जिम्मेदारी है। उस स्थिति में, आप जोड़ी के प्रत्येक तत्व का प्रबंधन कर सकते हैं:

  {// कुछ स्कोप std :: pair & lt; objectA *, objectB * & gt; The_pair = the_function (); std :: unique_ptr & LT; objectA & gt; pfirst (the_pair.first); std :: unique_ptr & LT; objectB & gt; psecond (the_pair.second); } // पॉइंटर्स हटाए गए हैं  

वैकल्पिक रूप से, आप अपना स्वयं का दायरा गार्ड लिख सकते हैं:

  struct pointer_pair_guard {pointer_pair_guard (std :: pair & lt; objectA *, ObjectB * & gt; & amp; p): p_ (p) {} ~ pointer_pair_guard () {delete p_.first; P_.second हटाएं; } Pointer_pair_guard (कॉन्स्ट पॉइंटर_पायर_गार्ड & amp;) = हटाना; pointer_pair_guard & amp; ऑपरेटर = (कॉन्स्ट पॉइंटर_पायर_गार्ड & amp;) = हटाना; निजी: std :: जोड़ी & lt; objectA *, objectB * & gt; & amp; p_; };  

तब

  {// कुछ स्कोप std :: pair & lt; objectA *, objectB * & gt; The_pair = the_function (); Pointer_pair_guard gd (the_pair); } // पॉइंटर्स हटाए जाते हैं  

Comments

Popular posts from this blog

c# - XML serialize base class without knowing derived class -

c# - UnhandledExceptionMode.ThrowException for AppDomain.UnhandledException -

udp - The relationship between MTU and size of skb in xmit function -