लौट रहा है एक समारोह जो एक वेक्टर या सेट रिटर्न:नकल से बचने के लिए कैसे करने के लिए जब मैं
set<int> foo() {
set<int> bar;
// create and massage bar
return bar;
}
set<int> afoo = foo();
इस मामले में, मैं समारोह foo() में एक अस्थायी मेमोरी की जगह बनाने, और फिर असाइन करें प्रतिलिपि करके afoo
पर। मैं वास्तव में इस प्रति से बचना चाहता हूं, किसी भी आसान तरीके से मैं इसे C++ 11 में कर सकता हूं? मुझे लगता है कि इसे रैवल्यू चीज के साथ करना है।
ठीक है, प्रश्न के लिए अद्यतन करें: यदि मैं स्वयं द्वारा परिभाषित एक वस्तु वापस करने जा रहा हूं, वेक्टर या सेट चीज़ नहीं, तो क्या इसका मतलब है कि मुझे एक चालक कन्स्ट्रक्टर को परिभाषित करना चाहिए? इस तरह:
class value_to_return {
value_to_return (value_to_return && other) {
// how to write it here? I think std::move is supposed to be used?
}
}
धन्यवाद !!!
अब जो मिला है वह सी ++ 11 में कोई प्रतिलिपि नहीं बनाएगा। यह चाल कर सकता है, लेकिन यहां तक कि उनको लगभग निश्चित रूप से [एन/आरवीओ] (http://en.wikipedia.org/wiki/Return_value_optimization) द्वारा अनुकूलित किया जाएगा। –
"जब मैं वापस आती हूं तो प्रतिलिपि से कैसे बचें" - 10 साल से अधिक समय तक रिलीज़ किए गए कंपाइलर के साथ संकलित करें। –
मैं उन सभी उत्तरों को कम करने के लिए बहुत मोहक हूं जो चाल/रावल का उल्लेख नहीं करते हैं। –