gpt4 book ai didi

c++ - 如何正确实现返回 ref 的运算符重载,以便轻松删除它们的工件?

转载 作者:太空狗 更新时间:2023-10-29 23:45:35 29 4
gpt4 key购买 nike

假设我像这样重载了 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;
}

出于向后兼容性和性能原因,运算符必须返回 Foobar&,而不是 Foobar 或指针。

然后,我类的用户会写这样的东西:

Foobar obj0, obj1;

obj1 = ~obj0;

现在从 ~ 返回的 new 丢失了,所以没有办法delete new,所以没有内存泄漏?如果有泄漏,如何设计才不会泄漏?

最佳答案

你是对的,它会导致内存泄漏。普通的 operator~ 不是按引用返回而是按值返回。运算符也应该是 const 以强制您不改变操作数。使用这种方法不会有任何内存泄漏:

Foobar Foobar::operator~() const
{
Foobar result;
// compute *result based on *this
return result;
// OR
return Foobar(<stuff to compute result>);
}

关于c++ - 如何正确实现返回 ref 的运算符重载,以便轻松删除它们的工件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17645427/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com