删除主文件中的指针

时间:2013-04-16 19:58:57

标签: c++ class pointers

我有一个班级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;
}

任何帮助表示赞赏!

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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的朋友。