Пусть один имеет следующий код:проблема памяти с оператором перегрузки
class MyClass {
public:
MyClass(int foo) : foo(foo){}
private:
int foo;
//overloaded operator +
public:
MyClass operator+(MyClass &mc){
MyClass c(mc.foo + foo);
return c;
}
};
int main(int argc, char* argv[]){
MyClass c1(10);
MyClass c2(12);
c2 = c1 + c2;
return EXIT_SUCCESS;
}
Если оператор + перегрузка, так что он не изменяет объект, но создать новый объект и вернуть его.
Когда c2 = c1 + c2
вызывается, c2
связан с новым объектом, но предыдущий объект, связанный с c2
, не освобожден (или, по крайней мере, мне кажется). Я прав?
Поскольку C++ не имеет сборщика мусора, это проблема?
Я что-то упустил?
Сделать его 'MyClass operator + (MyClass const & mc) const', так что' c1 + c2 + c3' работает, и все в порядке. –
Если вы напишете более правильный 'MyClass operator + (MyClass const & mc) const {return MyClass (mc.foo + foo); } ', вы можете быть менее смущены. –
Как правило, в C++, когда он выглядит довольно, это правильно и делает правильную вещь. Ключевым умением является заставить его выглядеть красиво :-) –