【发布时间】:2018-11-18 23:29:13
【问题描述】:
我有一个关于对象数组分配的问题, 问题是这样的: 我有一个班级叫人:
class Person {
char* name;
int ID;
public:
Person(char* name = NULL, int ID = 0) :name(name), ID(ID) {};
}
我正在尝试制作一组这样的人:
Person *pArr = new Person[size];
然后我从文件中提取数据(char* 表示字符串,int 表示 ID) 我使用 for 循环和构造函数将人员放置在循环中,如下所示:
for (int j = 0; j < size3; j++) {
pArr[j] = Person(Name, id);
}
在我完成我的程序后,我想使用析构函数并释放存储在 char* 名称中的分配字符串,但是当我添加析构函数时,它会在循环结束后立即触发, 每个被创建的 Person 都会立即销毁, 我知道它可以创建一个指针数组并分配这个人,但是在这个任务中我想这样做, 有没有正确的方法可以在不立即触发析构函数的情况下做到这一点?
【问题讨论】:
-
使用
std::vector和std::string代替数组,你的生活会更轻松。 -
拥有
char *作为类成员的原因很少。使用std::string。 -
您可能需要为您的班级定义一个赋值运算符。关注Rule of 3 and 5
-
pArr[j] = Person(Name, id);创建一个临时的Person对象,将其值复制到pArr[j],然后销毁临时的Person对象。 -
@samuelnj 因为不允许 OP 使用
std::string或std::vector,他可能也不允许使用std::unique_ptr。