来自更多的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);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我在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))
}
};
Run Code Online (Sandbox Code Playgroud)
Cor*_*mer 16
不要使用new,只需按价值返回.
Fraction operator*(Fraction const& other) const
{
auto numerator = other.numerator * this->numerator;
auto denominator = other.denominator * this->denominator;
return Fraction(numerator, denominator);
}
Run Code Online (Sandbox Code Playgroud)
你的后一种方法会导致泄漏的指针.Fraction由于返回值优化,您无需担心返回的被复制