假设我像这样重载了C++运算符,例如~
和=
。
Foobar& Foobar::operator~() const {
Foobar *result = new Foobar();
// compute *result based on *this
return *result;
}
Foobar& Foobar::operator=(Foobar& arg) {
// compute *this based on arg
// return *this for transitivity
return *this;
}
出于向后兼容性和性能的原因,运算符(operator)必须返回
Foobar&
,而不是Foobar
或指针。然后,我类的用户将编写如下内容:
Foobar obj0, obj1;
obj1 = ~obj0;
现在,从
~
返回的new
的返回丢失了,所以没有办法将delete
变成new
,所以没有内存泄漏吗?如果有泄漏,该如何设计从而没有泄漏? 最佳答案
没错,这会导致内存泄漏。普通的operator~
不会通过引用返回,而是通过值返回。运算符还应为常量,以强制您不要更改操作数。使用这种方法不会有任何内存泄漏:
Foobar Foobar::operator~() const
{
Foobar result;
// compute *result based on *this
return result;
// OR
return Foobar(<stuff to compute result>);
}