C++指针处理
C++ pointer handling
假设我使用一个指针创建了一个表单,而该表单包含作为另一个指针的子项,当我删除该表单时,我对主指针执行删除操作,我需要对子指针也执行删除操作还是编译器自己执行?
如果你是为指针分配内存的人,是的,你需要显式释放你正在分配的所有内存。
struct A
{
};
struct B
{
A* a;
B() { a = new A; }
~B();
};
B* b = new B;
delete b;
//you will have a memory leak here, since the memory pointed to by b.a
//is not released
正确的方法是释放析构函数中的内存:
struct B
{
A* a;
B() { a = new A; }
~B() { delete a; }
};
你应该仔细阅读明智的建议,它们可能更适合你的情况。
是的,通常需要显式删除它以避免内存泄漏。简单规则:如果你使用new
来分配它,你需要一个匹配的delete
来释放它
也就是说,你通常想要使用像智能指针这样的东西来自动处理这一切。
这个问题取决于窗体的析构函数的编写方式。例如,表单可能会尝试调用子表单的析构函数。如果它执行这种清理,则不需要进一步释放子窗体。了解您正在谈论的表单管理系统(例如MFC)将是有用的。
相关文章:
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 在自定义 std::vector-like 容器中处理指针和非指针模板类型的最佳方法是什么?
- 如何在 c++ 中处理 LinkedList 的指针
- C++在一个映射中存储不同的指针类型(并处理销毁)
- 处理从列表中删除指向对象的指针的"healthy"方法是什么?
- C 与 C++,处理 void** 指针
- 在这种情况下,我将如何继续 1 到 360 的"for loop"处理指针和地址?
- 用Cython包装C 类时处理指针
- GTK+ 如何处理指针
- 当不处理指针时,请调用子类(虚拟)函数(较晚绑定)
- 如果我确定只有一个线程一次处理指针/对象,则C/C 仍应使用同步
- 处理指针c++的分段错误(这次有更多代码)
- 用C++处理指针
- 当处理指针时,控制台中为*p1和p显示的不同值的含义
- C++地址处理(指针)
- 为什么使用mktime处理指针和非指针时difftime()会产生不同的结果?
- c++如何处理指针上的非虚函数调用
- 如何处理指针截断在ATLMFC包括文件
- 在处理指针时,vector的行为是否与数组相同?
- 处理指针数组