主题:[讨论]关于析构函数中的delete
// 关于建立构造函数完成部分成员的赋值
#include <iostream>
using namespace std;
#include "string"
class Score
{ char *Class;
char *Name;
float Math;
public:
Score(char *a,char *b,float c)
{ Class=new char[strlen(a)+1]; //在为这个私有变量开辟空间,然后开始进行复制的操作,的,不要忘了,这个指针的不同
Name=new char[strlen(b)+1];
Math=c;
Math=c; // 这个形式形式也是可以的,就是用直接相通类型之间的赋值
Class=a;
Name=b;
}
Score()
{};
Score(Score &p) //当申明为一个引用的时候了,那么这个用me=Score(p)来得到这个p的值的复制值
{
Class=p.Class;
cout<<"了Score(score &p)构造函数\n"<<Class;
}
void Pri()
{ cout<<"*班级**" <<Class<<"**姓名**"<<Name<<" **这个是数学成绩**"<<Math<<endl;//这个里没有加上string头文件,而导致的错误的,提示,我晕死,,,
}
void CopyScore(Score &p)
{ *this=p;
}
~Score()
{ // if(Class) delete[] Class; // 因为这个析构函数是在很多的地方引用的所以这个此时不能用
//if(Name) delete[] Name;
cout<<"\n 调用了析构函数\n";
}
void DEL(void)
{
};
void main()
{
Score M("二班","刘焕庭",78),M1; //如果去掉前面的空构造函数的话,会提示没有相应的函数与他对应
M.Pri();
cout<<"取部分成员"<<endl;
// M1.Score(M);
M1=Score(M);//
Score M2;
// 注意此时调用了析构函数,于是会引起debug错误,所以说是错误的,这个析构函数不能完成,
// 所以我手动建立一个删除函数,然后完成对这个new开辟的空间的删除
cout<<"\n 开始进行复制了\n";
M2.CopyScore(M);
M2.Pri();
}
我想问的就是,因为我开始使用这个new开辟的空间,那么我想在析构函数中调用这个delete,但是因为这个析构函数,在程序的执行的不同的段的时候都会引用,所以,会导致,错误,所以,我想问的就是,如果我建立了一个DEl()函数,就是专门用来删除new开辟的空间的,那么这个析构函数的作用是什么那,????
#include <iostream>
using namespace std;
#include "string"
class Score
{ char *Class;
char *Name;
float Math;
public:
Score(char *a,char *b,float c)
{ Class=new char[strlen(a)+1]; //在为这个私有变量开辟空间,然后开始进行复制的操作,的,不要忘了,这个指针的不同
Name=new char[strlen(b)+1];
Math=c;
Math=c; // 这个形式形式也是可以的,就是用直接相通类型之间的赋值
Class=a;
Name=b;
}
Score()
{};
Score(Score &p) //当申明为一个引用的时候了,那么这个用me=Score(p)来得到这个p的值的复制值
{
Class=p.Class;
cout<<"了Score(score &p)构造函数\n"<<Class;
}
void Pri()
{ cout<<"*班级**" <<Class<<"**姓名**"<<Name<<" **这个是数学成绩**"<<Math<<endl;//这个里没有加上string头文件,而导致的错误的,提示,我晕死,,,
}
void CopyScore(Score &p)
{ *this=p;
}
~Score()
{ // if(Class) delete[] Class; // 因为这个析构函数是在很多的地方引用的所以这个此时不能用
//if(Name) delete[] Name;
cout<<"\n 调用了析构函数\n";
}
void DEL(void)
{
};
void main()
{
Score M("二班","刘焕庭",78),M1; //如果去掉前面的空构造函数的话,会提示没有相应的函数与他对应
M.Pri();
cout<<"取部分成员"<<endl;
// M1.Score(M);
M1=Score(M);//
Score M2;
// 注意此时调用了析构函数,于是会引起debug错误,所以说是错误的,这个析构函数不能完成,
// 所以我手动建立一个删除函数,然后完成对这个new开辟的空间的删除
cout<<"\n 开始进行复制了\n";
M2.CopyScore(M);
M2.Pri();
}
我想问的就是,因为我开始使用这个new开辟的空间,那么我想在析构函数中调用这个delete,但是因为这个析构函数,在程序的执行的不同的段的时候都会引用,所以,会导致,错误,所以,我想问的就是,如果我建立了一个DEl()函数,就是专门用来删除new开辟的空间的,那么这个析构函数的作用是什么那,????