-1

我有一个类T,定义了一个析构函数T并尝试定义+运算符。

我该如何删除t2

还是我应该T以另一种方式从函数返回值?

T& T::operator + (const T& t1)
{
    T* t2 = new T;
    t2 = this + t1;
    return *t2;
}

void main()
{
    T t1(1,2), t2(3,8);
    cout << (t1 + t2) << endl;
}

任何帮助表示赞赏!

4

2 回答 2

2

这里不需要指针。使用对象。通常的习惯用法是operator+=作为成员函数和operator+自由函数提供:

class T {
public:
    T& operator+=(const T& t) {
        // do whatever you need to do to add `t` to `*this`
    return *this;
}

T operator+(const T& lhs, const T& rhs) {
    return T(lhs) += rhs;
}
于 2013-04-16T20:03:10.663 回答
0

您不想这样做(可能根本不想这样做)。

您要做的是创建一个包含正确值的临时值,然后返回:

T T::operator+(const T& t1) const { 
    return value + t1.value;
}

对于典型情况(您希望允许左操作数的转换),您可能希望使用自由函数:

T operator+(T const &a, T const &b) { 
    return T(a.val + b.val);
}

请注意,除非T::val是公开的(通常是一个糟糕的主意),否则这可能需要成为 T 的朋友。

于 2013-04-16T20:02:27.877 回答