读书人

重载operator+ 遇到有关问题

发布时间: 2012-05-29 12:16:00 作者: rapoo

重载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];    //...}; 

读书人网 >C++

热点推荐