我有一个类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;
}
任何帮助表示赞赏!
这里不需要指针。使用对象。通常的习惯用法是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;
}
您不想这样做(可能根本不想这样做)。
您要做的是创建一个包含正确值的临时值,然后返回:
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 的朋友。