C++ C++;指针处理

C++ 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, si

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

如果您是为指针分配内存的人,那么是的,您需要显式释放所有分配的内存

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; }
};

您应该仔细阅读智能指针,它们可能更适合您的情况。

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

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
来释放它


也就是说,您通常希望使用智能指针之类的东西来自动处理所有这些问题。

是的,您通常需要显式删除它以避免内存泄漏。简单规则:如果您使用
new
分配它,则需要匹配的
delete
来释放它


也就是说,您通常希望使用智能指针之类的东西来自动处理所有这些问题。

这个问题取决于表单析构函数的编写方式。例如,表单可能尝试调用子表单的析构函数。如果它执行此类清理,则无需进一步释放子窗体。了解您所谈论的表单管理系统(例如MFC)将提供信息。

这个问题取决于表单析构函数的编写方式。例如,表单可能尝试调用子表单的析构函数。如果它执行此类清理,则无需进一步释放子窗体。了解您所谈论的表单管理系统(例如MFC)将是一种有益的信息。

form?我们是在谈论.NET的WinForms吗?这些表单是使用Motif.Form制作的?我们是在谈论.NET的WinForms吗?表单是使用Motif制作的。表单是使用Motif制作的。表单是使用Motif制作的。