关于拷贝构造和析构

ericming200409 2009-08-14 04:58:45

template<class T>
class Matrix
{
public:
unsigned rows;
unsigned cols;
T **p;
public:
Matrix():rows(0),cols(0){p=NULL;}
Matrix(unsigned r,unsigned c);
~Matrix();

Matrix<T> Reverse(); //矩阵转置
T* operator [](unsigned i); //矩阵的下标访问
Matrix<T> operator +(const Matrix<T> &a); //矩阵相加
Matrix<T> operator *(const Matrix<T> &a); //矩阵相乘
Matrix<T> operator =(const Matrix<T> &a); //矩阵赋值
template <class Type > friend ostream& operator <<(ostream & os,const Matrix<Type> & a); //重载输出操作符
};

//析构函数
template <class T>
Matrix<T>::~Matrix()
{

if(NULL!=p)
{
for(int i=0;i<rows;i++)
delete[] p[i];
delete p;
}
}


#include"matrix.h"
#include<iostream>
using namespace std;
int main()
{

Matrix<int> matrix3(5,5);
Matrix<int> matrix4=matrix3;//此处调用合成的拷贝构造函数
return 0;//主函数结束时,matrix3和matrix4都会调用析构函数,它们的指针成员p指向的应该是同一块内存,为什么释放两次不会出错。在vs08和dev c++上都能正确执行
}


...全文
146 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
ericming200409 2009-08-14
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 cyldf 的回复:]
引用 10 楼 ericming200409 的回复:
看来没有为什么,不是语言的问题,是编译器实现的问题

你的编译器太弱了,这都检查不出来
[/Quote]
不会吧,阁下试了没?你试试看你的行不行?
ericming200409 2009-08-14
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 coolapple_ 的回复:]
Matrix <int>  matrix3(5,5);
调用有参构造函数你写了嘛?
你只是申明了一个有参构造函数吧
[/Quote]
写了。跟问题没有很大关系,没有贴出来而已
winingsky 2009-08-14
  • 打赏
  • 举报
回复
cyldf 2009-08-14
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 ericming200409 的回复:]
看来没有为什么,不是语言的问题,是编译器实现的问题
[/Quote]
你的编译器太弱了,这都检查不出来
CoolApple_ 2009-08-14
  • 打赏
  • 举报
回复
Matrix<int> matrix3(5,5);
调用有参构造函数你写了嘛?
你只是申明了一个有参构造函数吧
ericming200409 2009-08-14
  • 打赏
  • 举报
回复
看来没有为什么,不是语言的问题,是编译器实现的问题
pengzhixi 2009-08-14
  • 打赏
  • 举报
回复
为什么不死,我是不知道,估计要问编译器的作者。但是我知道这么做很危险
ericming200409 2009-08-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 xingzhe2001 的回复:]
C/C++ codechar* p=newchar[128];
delete []p;
delete []p;
你这么试一下看死不死
[/Quote]

照样不死
xingzhe2001 2009-08-14
  • 打赏
  • 举报
回复

char* p = new char[128];
delete []p;
delete []p;

你这么试一下看死不死
ericming200409 2009-08-14
  • 打赏
  • 举报
回复
觉得很不能理解而已,知道就说说,不要管我做什么
cl383804490 2009-08-14
  • 打赏
  • 举报
回复
xingzhe2001 2009-08-14
  • 打赏
  • 举报
回复
运气好?
taodm 2009-08-14
  • 打赏
  • 举报
回复
编程又不是恶搞。知道错了就可以了,一直写正确的代码,而不是依靠人品。
pengzhixi 2009-08-14
  • 打赏
  • 举报
回复
你都知道他们指向同一块内存了,为什么不给出一个安全的代码
ericming200409 2009-08-14
  • 打赏
  • 举报
回复
补充一下问题,为什么释放两次同一块内存不会出错,在dev c++和vs08上都能正确执行

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧