|
本帖最后由 Mr-Shuaibi 于 2020-4-21 12:24 编辑
- #include <iostream>
- using namespace std;
- class student
- {
- public:
- char* pname;
- int num;
- char sex;
- int age;
- student(char* t_name, int t_num, char t_sex, int t_age)
- {
- int len = strlen(t_name) + 1;
- pname = new char[len];
- memset(pname, 0, len);
- strcpy(pname, t_name);
- num = t_num;
- sex = t_sex;
- age = t_age;
- }
- student()
- {}
-
- ~student()
- {
- if (pname)
- {
- delete[]pname;
- }
- cout << "析构已执行" << endl;
- }
- student& operator=(const student& stud)
- {
-
- sex = stud.sex;
- num = stud.num;
- age = stud.age;
-
- if (pname) //????????????
- {
- delete[]pname;
- }
- int len = strlen(stud.pname) + 1;
- pname = new char[len];
- memset(pname, 0, len);
- strcpy(pname, stud.pname);
- return *this;
- }
- };
- int main()
- {
- student zhangsan("zhangsan", 1001, 'm', 18);
- student wangwu;
- wangwu = zhangsan;
- return 0;
- }
复制代码
按照syc所讲的,在=运算符重载的函数中加上和析构函数中一样的if语句,这时候在一步一步调试的时候就会执行到此处报错,说读取位置时发生访问冲突,所以就将重载中的if语句删了,这样就能正常执行了,这是为啥?
我觉得 在构造函数里加一句
student()
{
pname = NULL;
}
|
上一篇: 求助 三维坐标点集筛选路径规划下一篇: 一道静态联编和动态联编的题
|