C++指针结构不会被删除
C++ pointer struct does not get deleted
>我构建了一个自定义数据结构,类似于双链接的RBTree,虽然逻辑看起来不错,但我在删除节点时没有看到任何内存被释放。
这是我的节点声明:
typedef struct rbtreere_node
{
public:
NMessage *n_message;
// Node Specific //
enum color color_ID; //<<--- Color for ID side of RBTreeRe
enum color color_Price; //<<--- Color for Price side of RBTreeRe
int id; //<<--- Unique Identifier.
rbtreere_node *left_ID, *right_ID, *parent_ID, *left_Price, *right_Price, *parent_Price;
}*node;
当我调用我的 remove 函数时,我在返回之前以delete n
结束。我检查了一下,如果我在返回之前尝试访问任何node n
数据,它仍然存在......
即我称之为:
delete n;
std::cout << n->color_ID<<"nn";
它确实返回节点颜色
我应该为它构建一个自定义析构函数吗?
我也将node message
作为 var,而不是指针,但这似乎并没有改变任何东西......
编辑:我的问题是删除任何甚至所有节点后,我没有看到内存使用量有任何下降。我应该以不同的方式处理它吗?
我检查了一下,如果我在返回之前尝试访问任何节点 n 数据,它仍然存在......
delete n;
std::cout << n->color_ID<<"nn";
删除n
后取消引用具有未定义的行为。
我应该为它构建一个自定义析构函数吗?
不。除非n_message
拥有它所指向的内存,在这种情况下,隐式析构函数将泄漏该内存。
我的问题是删除任何甚至所有节点后,我没有看到内存使用量有任何下降。
大多数malloc
的实现(通常是通过new
实现用于动态内存分配的)永远不会将释放的内存返回给操作系统。相反,它会将其重用于后续分配。这不是问题。
我应该以不同的方式处理它吗?
除了摆脱具有UB的"检查"之外,没有。一切似乎都如预期的那样。
delete
只解除分配内存并调用对象的析构函数。它不会擦除内存或做类似的事情。除非你有一些需要(例如安全性),否则这只是浪费时间和代码。delete
之后,您仍然可以(并且显然是)指向内存并取消引用它。这样做非常危险,因为它是未定义的行为。
相关文章:
- 无法删除指针,已触发断点
- 删除指针数组 (C++) 中的元素
- 如果我删除指针,我的C++程序会意外删除系统文件吗?
- 为什么const_cast删除指针的恒常性,而不删除指向常量的指针的恒常性?
- 删除指针后内存泄漏
- 这是系统资源吗?(或者我怎么知道我是否需要删除指针) - 在 C++ 中使用 C
- C++ 从 2 组指针中删除指针
- 当删除 [] 指针工作时,为什么无法获得指向的数组大小?
- 在这种情况下,删除指针数组期间会发生什么?
- 在C++中删除指针数组时析构函数崩溃
- 何时/如何在使用指针后正确删除指针?
- 在C++库中,谁应该删除指针、用户或库?
- 删除指针后阻止对象使用 "this"
- 删除指针后C++尝试/捕获
- 删除指针内存分配以避免内存泄漏
- 删除指针时,未分配被释放的 C++ 指针错误
- 如何从抽象类中删除指针
- 我应该在 v8::外部手动删除指针吗?
- 删除指针
- C 如何删除指针的默认对象成员