मैं दो मान वापस करना चाहता हूं, जिनमें से एक एक नई वस्तु है। मैं std::pair
का उपयोग कर ऐसा कर सकते हैं:किसी अन्य मान के साथ एक नई वस्तु को लौटाना
class A {
//...
};
std::pair<A*, int> getA()
{
A* a = new A;
//...
}
कोड अपवाद-सुरक्षित बनाने के लिए, मुझे क्या करना चाहते हैं:
std::pair<std::auto_ptr<A>, int> getA()
{
std::auto_ptr<A> a(new A);
//...
}
लेकिन इस संकलन नहीं होगा के रूप में auto_ptr
को संशोधित किए बिना कॉपी नहीं किया जा सकता है auto_ptr
कॉपी किया जा रहा है। ठीक है, इसका मतलब है auto_ptr
अन्य प्रकारों (एक और तरीके से) की तरह अच्छी तरह से लिखता नहीं है। इस मामले में एक नई वस्तु वापस करने का एक अच्छा तरीका क्या है?
एक विकल्प shared_ptr
वापस करने के लिए है और दूसरा एक इनआउट संदर्भ है। लेकिन मैं कुछ अन्य विकल्प की तलाश में हूं। मैं कुछ ऐसा कर सकता हूं:
class AGetter
{
void getAExecute()
{
//...
// set a_ and i_
}
std::auto_ptr<A> getA() const
{
return a_.release();
}
int getInt() const
{
return i_;
}
private:
std::auto_ptr<A> a_;
int i_;
};
क्या कोई बेहतर तरीका है?
shared_ptr बना सकते हैं और वापस जाने से थोड़ा/तुच्छता से अक्षम और वायरल है। Shared_ptr के खिलाफ बहुत मजबूत तर्क नहीं, लेकिन फिर भी उनके खिलाफ एक कारक बनाते हैं (मामलों में से 10%)। –
सौभाग्य से, अगले मानक में unique_ptr है, जिसे इसमें शामिल जोड़ी के साथ स्थानांतरित किया जा सकता है। –