tôi cung cấp cho các ví dụ sau để minh họa cho câu hỏi của tôi:Làm thế nào để giảm mức tiêu thụ bộ nhớ của toán tử + cho lớp tự định nghĩa trong 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;
}
Một vấn đề liên quan đến operator +
với là chúng ta phải tạo ra một đối tượng tạm BigClass
tạm thời và sau đó trả lại. Có cách nào để giảm bớt gánh nặng này?
Có thể trùng lặp: https://stackoverflow.com/questions/4421706/what-are-the-basic-rules-and-idioms-for-operator-overloading – Rakete1111
sao chép elision? http://en.cppreference.com/w/cpp/language/copy_elision – cppBeginner
bạn có thể tránh tạm thời, nhưng cách duy nhất để tránh tạo ra một trường hợp mới không phải là để sử dụng 'operator ='. 'Operator + = 'không yêu cầu bạn phải tạo một đối tượng mới – user463035818