gpt4 book ai didi

c++ - 通过引用返回一个新对象

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:07:18 25 4
gpt4 key购买 nike

来自更多的 Java 背景,我想知道如何通过引用返回一个新对象。我希望 Fraction 类是不可变的,这样每个操作都会返回一个包含操作结果的新对象。

这将是我的 Java 代码:

class Fraction {
int numerator;
int denominator;

// Constructor

Fraction multiply(Fraction other) {
return new Fraction(other.numerator * this.numerator,
other.denominator * this.denominator);
}

}

但如果我在 C++ 中这样做,我会造成内存泄漏,因为我无法清理已初始化的 Fraction 对象,因为我只有对该对象的引用。那么,我该如何在 C++ 中处理这个问题呢?

class Fraction {
private:
int32_t numerator;
int32_t denominator;
public:
Fraction(int32_t numerator, int32_t denominator) {
this->numerator = numerator;
this->denominator = denominator;
}

Fraction& operator*(Fraction& other) {

auto numerator = other.numerator * this->numerator;
auto denominator = other.denominator * this.denominator;

return *(new Fraction(numerator, denominator))
}
};

最佳答案

根本不要使用new,只是按值返回。

Fraction operator*(Fraction const& other) const
{
auto numerator = other.numerator * this->numerator;
auto denominator = other.denominator * this->denominator;

return Fraction(numerator, denominator);
}

后一种方法将导致 leaked pointer .由于 return value optimization,您无需担心返回的 Fraction 被复制

关于c++ - 通过引用返回一个新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32457686/

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