daję następujące przykłady ilustrujące moje pytanie:Jak zmniejszyć zużycie pamięci operatora + dla własnej klasy w C++?
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;
}
Jeden problem w odniesieniu do operator +
jest to, że mamy do wygenerowania temp BigClass
obiektu czasowo, a potem zwrócić go. Czy są jakieś sposoby na zmniejszenie tego obciążenia?
Możliwy duplikat: https://stackoverflow.com/questions/4421706/what-are-the-basic-rules-and-idioms-for-operator-overloading – Rakete1111
kopia elizja? http://en.cppreference.com/w/cpp/language/copy_elision – cppBeginner
można uniknąć tymczasowego, ale jedynym sposobem uniknięcia tworzenia nowej instancji nie jest użycie 'operator ='. 'operator + =' nie wymaga tworzenia nowej instancji – user463035818