在 c++ 中删除列表
Delete a list in c++
我有类A和B类.类B有一个指向类A的指针作为字段,指向一个列表:
struct A {
A* next;
char* txt;
...};
struct B {
A* next;
int length;
...};
我以这种方式制作此列表的每个元素:
void B::add_elem(char* str) {
A* tmp;
tmp = new A;
tmp->txt = str;
tmp->next = next;
next = tmp;
}
我必须删除最后的列表。默认情况下会像我所说的 A 类析构函数一样删除它new A
(但我让我的析构函数打印消息,没有)还是应该显式删除它(我试过了,这是编译中的错误)?请帮忙。
B::~B() {
int i;
A* tmp;
cout<<"del listn";
if (next) { // at least one elem
tmp = next;
while (tmp->next) {
tmp = tmp->next;
delete next;
cout<<"del elemn";
next = tmp;
}
delete tmp;
}
}
使用
new
创建的任何指针的生存期必须由创建者使用匹配的delete
手动管理以释放内存。
这意味着每个拥有原始指针的类都必须处理其删除。这通常在析构函数中完成。如果您使用的是 C++11,则可以使用 unique_ptr 而不是管理其自身生命周期的原始指针。这将帮助您摆脱许多错误和内存泄漏,但会为您的设计添加更多约束。在大多数情况下,这些约束是你真正想要的。
为了很好地处理C++内存管理问题,您可以查看 https://isocpp.org/wiki/faq/freestore-mgmt
哦,它有效!事实证明,我忘记为某个字段提供内存,但在析构函数中我想删除它。这是一个复杂的类:一些静态字段和一个动态字段:一个动态的海量,其每个成员都是指向列表的指针。最后,这个析构函数工作:
set::~set() {
int i;
elem* tmp;
for(i=0; i<size; i++) {
if (table[i].next) { // at least one elem
tmp = table[i].next;
while (tmp->next) {
tmp = tmp->next;
delete table[i].next;
table[i].next = tmp;
}
delete tmp;
}
}
delete[] table;
cout<<"del setn";
}
nirvana@lpt00:~/cpp/new$ ./a.out
new set
new list
new list
new list
new list
new list
new el
new el
del el
del el
del list
del list
del list
del list
del list
del set
谢谢大家!
相关文章:
- 从链接列表c++中删除一个项目
- C++如何通过用户输入删除列表元素
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- 删除列表中的第n个元素
- 你能检查一下为什么在这个代码中从链接列表中删除项目不起作用吗
- 从gsl_matrix中删除列
- 从文件中删除单词列表的最快方法
- 如何删除C 圆形列表中最高发现元素旁边的元素
- 删除为列表分配的内存
- 删除对象列表中的类似项目
- 如何使用C 创建多列列表/向量
- 从大向量中删除字符串列表的有效方法
- 从 2D 数组中删除列C++
- 删除标准::列表中的重复项
- 删除循环列表中的节点时崩溃
- 删除std列表中的指针对象
- 列表控件按特定列删除项
- 正确删除std::列表中分配给其他地方的指针
- 在C++中删除整个列表
- 如何删除std::列表中的一半元素