关于类数据成员申请地址的问题
# include <iostream>using namespace std;class person{private: char *name; //name指向信息串 int age; //年龄 public: person(); // 构造函数说明 ~person(); // 析构函数说明 void assignment(char *a, int b); // assignment函数说明 void show (); // show函数说明 };// 构造函数定义person :: person() { name=new char('\0');// 为name申请存储空间,置为空 age=-1; // 为age 赋初始值 }// 析构函数定义person :: ~person(){ delete [ ] name; // 回收name空间 }// assignment函数定义void person :: assignment(char *a, int b) { name = new char[strlen(a) + 1]; strcpy(name,a); // 用参数a的值修改name age=b; };// show函数定义void person :: show (){ cout << "\n 姓名:" << name << " 年龄:" << age ; };void main () { // 生成对象数组emp[5] person emp[5]; // 给对象数组赋值 emp[0].assignment("张立三",25); emp[1].assignment("王冠之",28); emp[2].assignment("王大成",35); emp[3].assignment("英乐乐",21); emp[4].assignment("胡忠厚",26);// 显示emp int i; for (i=0; i<5; i++) { emp[i].show(); } cout <<endl<<endl; }void person :: assignment(char *a, int b){ delete name; name = new char[strlen(a) + 1]; strcpy(name,a); // 用参数a的值修改name age=b;};
[解决办法]
assignment,operator=,等涉及到复制且类中有指针成员的时候,
需要仔细考虑,是否需要释放原有资源,指针delete之后是否需要置0以防止
多次delete,是否需要值拷贝等。