如何使用动态分配的复制构造函数?

How to use copy constructor with dynamic allocation?

我在学校练习中遇到问题,我们需要对 char 数组和 int 数组使用动态分配。最主要的是 我不应该更改主函数 和对象的构造方式。

class Automobile
{
 char* Name; //this is the name of the car that needs to be saved with dynamic alloc.
 int* Reg; //registration with dynamic alloc.
 int speed; //speed of the car
public:
Automobile(){ speed=0;}
Automobile(char* name,int* Reg,int speed)
{
    Name=new char[strlen(name)+1];
    strcpy(Name,name);
    Reg = new int[5];
    for(int i=0;i<5;i++)
    {
        this->Reg[i]=Reg[i];
    }
    this->speed=speed; //the normal constructor doesn't make any problems since it's called once
}
 Automobile(const Automobile& new)
 {
    Name= new char[strlen(new.Name)+1];
    strcpy(Name,new.Name);
    Reg=new int[5];
    for(int i=0; i<5; i++) Reg[i]=new.Reg[i];
    speed=new.speed;
}

 ~Automobile(){
    delete [] Name;
    delete [] Reg;
}
int main()
{
int n;
cin>>n;

for (int i=0;i<n;i++)
{
    char name[100];
    int reg[5];
    int speed;

    cin>>name;

    for (int i=0;i<5;i++)
        cin>>reg[i];

    cin>>speed;

    Automobile New=Automobile(name,reg,speed);

}

在主函数中,对象 New 被重新创建(??) 循环因此调用了复制构造函数(我不确定)。在复制构造函数中,我没有删除内存(我应该吗?),所以调试器告诉我在我为 New Memory 创建的行中存在问题姓名。我尝试添加 delete [] Name 并将另一个对象的名称保存在临时指针中,这样我就可以将名称重新指定给临时指针,但这也不起作用。编译器在我构建它时没有显示任何错误,但是我应该保存练习的页面显示我有 bad_alloc(我是不确定它是否连接到复制指针)。

这个,在三参构造函数中

Reg = new int[5];

分配给函数的参数,而不是成员。
这会使成员未初始化(因为您没有初始化它),这会导致您对数组的复制写入随机位置,这可能会也可能不会失败。
如果不失败,析构函数中的delete很可能会失败。

一个很好的解决方法是不要将成员的名称重复用于同一范围内的其他内容(在这种情况下重命名参数)。
那么遗漏 this-> 不仅不是灾难,甚至是推荐。

您还忘记了在默认构造函数中初始化指针成员。

旁注:创建和初始化对象的规范方法是

Automobile New(name,reg,speed);