C++指针处理

  • 本文关键字:处理 指针 C++ c++
  • 更新时间 :
  • 英文 :


假设我使用一个指针创建了一个表单,而该表单包含作为另一个指针的子项,当我删除该表单时,我对主指针执行删除操作,我需要对子指针也执行删除操作还是编译器自己执行?

如果你是为指针分配内存的人,是的,你需要显式释放你正在分配的所有内存。

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)将是有用的。

最新更新