gpt4 book ai didi

c++ - 内存管理 : arrays and dynamic allocation with new operator

转载 作者:行者123 更新时间:2023-11-28 03:18:25 26 4
gpt4 key购买 nike

内存管理:数组和使用新运算符的动态分配

问。在内存管理方面,会出现什么错误?

class String
{
public:
String(const char right[]);
String& operator= (const String& right);
int length() const;
private:
char* buffer;
int len;
}

int String::length() const {return len;}

String::String(const char right[])
{
len = 0;
while (right[len] != '\0')
len++;
buffer = new char[len+1];
for (int i = 0; i < len; i++)
buffer[i] = right[i];
buffer[len] = '\0';
}

String& String::operator= (const String& right)
{
if (this != &right)
{
delete[] buffer;
len = right.length();
char* buffer = new char[len + 1];
for (int i = 0; i < len; i++)
buffer[i] = right[i];
buffer[len] = '\0';
}
return *this;
}

回答。我不知道...你能帮帮我吗?这个好像也ok新的,它也被删除了。内存泄漏在哪里?

请告诉我。谢谢,

最佳答案

您需要提供一个分配指针成员的构造函数(事实上,您的类的所有构造函数都应该这样做)和释放它的析构函数。

此外,您需要提供一个复制构造函数来执行指针成员的深层复制。

String::String(const String& obj)
{
....
}

好读:
What is The Rule of Three?

此外,String 对于类来说是一个糟糕的名称,尤其是因为存在 std::string

关于c++ - 内存管理 : arrays and dynamic allocation with new operator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16161004/

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