2012-03-26 76 views
0

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

+1

Form?我们在谈论.NET的WinForms吗? – jalf 2012-03-26 06:36:00

+0

表格使用Motif制作。 – anirvan 2012-03-28 05:58:23

回答

4

如果你是为指针分配内存的人,是的,你需要明确释放你分配的所有内存。

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

你应该对智能指针读了,他们可能会更适合你的情况。

0

是的,你通常需要明确地删除它以避免内存泄漏。简单的规则:如果您使用new分配它,则需要匹配delete才能将其分配。

也就是说,你通常想使用类似智能指针的东西来自动处理所有这些。

0

这个问题取决于写入表单的析构函数的方式。例如,表单可能会尝试调用子表单的析构函数。如果它执行这种清理,那么你不需要进一步发布子表单。知道你在讨论什么表单管理系统(例如MFC)会很有帮助。

+0

表格使用Motif制作。 – anirvan 2012-03-28 05:58:34