Deep Copy не работает

в следующем примере я делаю deepcopy, все работает нормально, но когда obj2 выходит из области видимости, вызывается деструктор и происходит сбой внутри деструктора, поэтому, пожалуйста, помогите, что не так с моим кодом:

#include "stdafx.h"#include <windows.h>
#include <stdlib.h>
#include <iostream>
#include <conio.h>
using namespace std;

class ClassA
{
private:
char *str;
int id;

public :
ClassA(int x, char *s)
{
int len = strlen(s)+1;
str = new char[len];
id = x;
strcpy(str, s);
}
~ClassA()
{
delete [] str;
}
ClassA(ClassA &obj)
{
id = obj.id;
int len = strlen(obj.str);
str = new char[len] + 1;
strcpy(str, obj.str + 1);
}
void disply()
{
cout << id << " " << str << endl;
}
};

int main()
{
ClassA Obj1(5, "hello");
{
ClassA Obj2 = Obj1;
Obj2.disply();
}
Obj1.disply();
return 0;
}

0

Решение

Вам нужен оператор присваивания. Вам нужно написать свой конструктор копирования, как это

ClassA(const ClassA &obj)

Const очень важен.

Плюс у вас есть несколько ошибок

        int len = strlen(obj.str);
str = new char[len] + 1;
strcpy(str, obj.str + 1);

должно быть

        int len = strlen(obj.str);
str = new char[len + 1];
strcpy(str, obj.str);
0

Другие решения

Вы должны следовать правило трех и предоставить оператор присваивания. Но эта строка выглядит подозрительно:

str = new char[len] + 1;
strcpy(str, obj.str + 1);

Вы, наверное, имеете в виду

str = new char[len + 1];
strcpy(str, obj.str);

Как только вы закончите исправление вашего класса, вы можете использовать std::string вместо char*,

class ClassA
{
private:
std::string str;
int id;
public:
// no copy constructor or assignment operator or destructor required
};
3

По вопросам рекламы [email protected]