gpt4 book ai didi

c++ - 在 C++ 的析构函数中调用 delete[]

转载 作者:搜寻专家 更新时间:2023-10-31 00:27:44 24 4
gpt4 key购买 nike

我对下面的代码有疑问,析构函数里面有一个析构函数delete line[],我只想知道这个delete是否有stack over flow,这可能是一个结果对析构函数的递归调用。

class Line {
public:
char *line;
Line(const char *s = 0) {
if (s) {
line = new char[strlen(s)+1];
strcpy(line, s);
} else {
line = 0;
}
}

~Line() {
delete[] line; //----------> how this delete will work?
line = 0;
}

Line &operator=(const Line &other) {
std::cout <<"go"<< endl;
delete[] line; //----------> purpose of using this delete??
line = new char[other.len()+1];
strcpy(line, other.line);
return *this;
}

int operator<=(const Line &other) {
int cmp = strcmp(line, other.line);
return cmp <= 0;
}

int len() const {
return strlen(line);
}
};





int main() {
Line array[] = {Line("abc"), Line("def"),
Line("xyz")};
Line tmp;
}

重载赋值运算符里面的delete是在分配新内存之前清理内存(我在哪看过,说错了请指正),但是这个delete会调用析构函数吗?

请解释

最佳答案

不,不会。

此删除语句将删除 char 数组。 Line 的析构函数仅在销毁 Line 对象时调用。然而,这里的情况并非如此。

可变线和对象/类线是不同的东西。

line 变量是Line 类中的一个成员变量。所以这两个名字看似相同,但完全不同。

关于c++ - 在 C++ 的析构函数中调用 delete[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47904269/

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