重载operator+ 遇到有关问题

重载operator+ 遇到问题
这是我的 +的重载。

C/C++ code

template<class T, int row, int col>
const CMatrix<T, row, col> CMatrix<T, row, col>::operator +(const CMatrix& tmp)
{
    CMatrix<T, row, col> ans(0);
    ......
    ......(过程略,很简单)
    ......    
    return ans;
}



在最后返回了这个临时的对象。
但是我这个类的析构函数是这样的。data是其成员变量。

C/C++ code

CMatrix<T, row, col>::~CMatrix()
{delete data;}



也就是说我在返回之前就已经销毁了,所以是不可能返回成功的。

以前写简单的int 的加号重载什么的,因为没考虑过写析构函数,就一直没在意,今天突然发现了这个问题。

所以想请教一下,怎样可以实现。谢谢。

------解决方案--------------------
那你看看
C++类中的4个特殊函数 - 缺省构造函数、拷贝构造函数、拷贝赋值操作符和析构函数
这篇文章
------解决方案--------------------
楼主 matrix 类的问题在于,行和列已经在 template 中指定了,还自己手工分配内存;
比较好的写法是直接用 stack, i.e.
C/C++ code
template<typename T, std::size_t R, std::size_t C>
struct matrix
{
    T data_[R][C];
    //...
};