这只是个空想阅读本等问题时,我有:在C++中删除类或结构时会删除多少?
What is the correct way to delete char**
如果已物体内部创建在问题中提到的字符和该对象被删除,是否会正确地清理指针也好,还是会卡在内存中?
这只是个空想阅读本等问题时,我有:在C++中删除类或结构时会删除多少?
What is the correct way to delete char**
如果已物体内部创建在问题中提到的字符和该对象被删除,是否会正确地清理指针也好,还是会卡在内存中?
如果你删除一个对象,该对象的析构函数将被调用,所以你需要在析构函数中做一个删除操作。所以请记住,类在堆上分配的所有内容都必须在析构函数中释放。如果它被分配在堆栈上自动发生这种情况
struct A
{
A() { std::cout << "A()" << std::endl; ptr = new char[10]; }
~A() { std::cout << "~A()" << std::endl; delete []ptr; }
char *ptr;
};
但要小心,如果你使用的是继承,如果从基类A
继承,你需要做的基础析构函数虚拟的,或者在析构函数A
将不会被调用,您将有内存泄漏。
struct Base
{
virtual ~Base() {}
};
struct A : public Base
{
A() { std::cout << "A()" << std::endl; ptr = new char[10]; }
~A() { std::cout << "~A()" << std::endl; delete []ptr; }
char *ptr;
};
他们会卡在内存中。因此,当您在对象内进行动态内存分配时,您需要定义析构函数。当父对象即将被删除时,D'tor被调用,并且你应该明确地释放所有的子分配内存。请致电Wikipedia。
是的,你会在类的析构函数中清理内存。
显式指针必须是delete
(由您或某个库包装器)。例如;
struct A {
char *p; // assume p = new char[] somewhere;
};
A* pA = new A;
delete pA; // <-- this doesn't clean up char* p
如果您在Deconstructer中专门告诉它,对象只会清除指针。
如果一个类被正确写入,删除该类的一个实例应该释放该类所分配的所有资源。
如果类存储指向内存的指针而不是分配,除非文档另有规定,否则通常不会删除这些指针。
而当你定义一个析构函数时,你应该定义一个复制构造函数和一个复制赋值运算符。 [见这里](http://stackoverflow.com/questions/4172722/)。 – 2011-05-13 09:19:58
@Space:错误...三规则不包括* constructor *:[见维基](http://en.wikipedia.org/wiki/Rule_of_three_(C%2B%2B_programming)) – Nawaz 2011-05-13 09:21:09
@Nawaz:谢谢。这是一个错字。现在好多了? – 2011-05-13 09:23:44