我对以下代码有疑问,在析构函数中有一个析构函数delete line[]
,我只想知道此删除是否有任何堆栈溢出,这可能是递归调用析构函数的结果。
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语句将删除char数组。仅在销毁Line对象时才调用Line的析构函数。但是,这里不是这种情况。
变量行和对象/类行是不同的东西。
line变量是Line类中的成员变量。因此,这两个名称看起来相同,但完全不同。
关于c++ - 在C++中的析构函数中调用delete [],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47904269/