打印

局部对象返回问题

[复制链接]
1036|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
txcy|  楼主 | 2012-4-26 19:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//构造一个n*n的单位矩阵
Matrix::Matrix(unsigned long n)
{
m_row=n;
m_column=n;

m_p=new double[n*n]; //申请n*n的空间

for(unsigned long i=0;i!=m_row;++i)
{
for(unsigned long j=0;j!=m_column;++j)
{
if(i==j)
*(m_p+m_column*i+j)=1.0;
else
*(m_p+m_column*i+j)=0.0;
}
}

}

//析构函数
Matrix::~Matrix()
{
delete []m_p;
}

Matrix& Matrix::operator*(Matrix& mat2)
{
assert(m_column==mat2.m_row);

Matrix res(m_row,mat2.m_column);
for(unsigned long i=0;i!=m_row;++i)
{
for(unsigned long j=0;j!=mat2.m_column;++j)
{
*(res.m_p+res.m_column*i+j)=0.0;
for(unsigned long t=0;t!=m_column;++t)
*(res.m_p+res.m_column*i+j)+=*(m_p+m_column*i+t)*mat2[t][j];
}
}

return res;
}


在重载*的函数中创建一个Matrix对象,最后返回该对象,当函数结束Matrix对象销毁时,对象的数据成员m_p被释放,它里边的内容就会不存在了,这个问题应该怎么解决???

相关帖子

沙发
无冕之王| | 2012-4-26 19:34 | 只看该作者
1 成员的operator*应当返回类的实例而不是引用。
2 有自己分配管理的内存的类应当正确地定义拷贝构造和赋值。如果支持C++11,为了更高效率应当同时定义移动构造和赋值。

使用特权

评论回复
板凳
baidudz| | 2012-4-26 19:36 | 只看该作者
不返回引用.返回一个实体.

使用特权

评论回复
地板
hsbjb| | 2012-4-26 20:59 | 只看该作者
同意2楼大侠的观点,成员的operator*应当返回类的实例而不是引用

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

274

主题

2106

帖子

0

粉丝