gpt4 book ai didi

c++ - 深拷贝不起作用

转载 作者:行者123 更新时间:2023-11-28 00:47:37 25 4
gpt4 key购买 nike

在下面的例子中,我正在做 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;
}

最佳答案

您需要关注the rule of three并提供赋值运算符。但是这一行看起来很可疑:

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
};

关于c++ - 深拷贝不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15675978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com