मैं मेरे सवाल का वर्णन करने के लिए निम्न उदाहरण दे:सी ++ में स्वयं परिभाषित कक्षा के लिए + ऑपरेटर मेमोरी खपत को कैसे कम करें?
operator +
के संबंध में
class BigClass
{
public:
static int destruct_num;
friend BigClass operator + (const BigClass &obj1, const BigClass &obj2);
std::vector<int> abc;
BigClass()
{
}
~BigClass()
{
destruct_num++;
std::cout << "BigClass destructor " <<destruct_num<< std::endl;
}
BigClass(BigClass&& bc) :abc(std::move(bc.abc))
{
std::cout << "move operation is involed" << std::endl;
}
};
int BigClass::destruct_num = 0;
BigClass operator + (const BigClass &obj1, const BigClass &obj2)
{
BigClass temp;
temp.abc = obj1.abc;
temp.abc.insert(temp.abc.end(), obj2.abc.begin(), obj2.abc.end());
return temp;
}
int main(void)
{
BigClass a;
a.abc = { 1,2,3 };
BigClass b;
b.abc = { 5,6,7 };
BigClass c = a + b;
// for (auto& v : c.abc)
// std::cout << v << " ";
return 0;
}
एक समस्या यह एक अस्थायी BigClass
वस्तु अस्थायी उत्पन्न करने के लिए और फिर इसे वापस है कि हम है। क्या इस बोझ को कम करने के लिए कुछ रास्ता हैं?
संभावित डुप्लिकेट: https://stackoverflow.com/questions/4421706/what-are-the-basic-rules-and-idioms-for-operator-overloading – Rakete1111
प्रतिलिपि इलिजन? http://en.cppreference.com/w/cpp/language/copy_elision – cppBeginner
आप अस्थायी से बच सकते हैं, लेकिन एक नया उदाहरण बनाने से बचने का एकमात्र तरीका 'ऑपरेटर =' का उपयोग नहीं करना है। 'ऑपरेटर + =' आपको एक नया उदाहरण बनाने की आवश्यकता नहीं है – user463035818