I give the following examples to illustrate my question:
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;
}
One problem with regard to operator + is that we have to generate a temp BigClass object temporally and then return it. Are there someways to reduce this burden?