通过引用返回新对象

Tim*_*ele 1 c++ c++11

来自更多的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由于返回值优化,您无需担心返回的被复制

  • 另外,乘法运算符首先返回引用或指针是没有意义的. (3认同)