这只是出于好奇,因为除了最基本的用途外,我没有在 c++ 中使用过new
和。delete
我知道这delete
会释放内存。我想知道的是它如何处理更复杂的情况?
例如,如果我有一个这样的用户定义类:
class MyClass
{
public:
MyClass();
~MyClass()
{
delete [] intArray;
}
//public members here
private:
int* intArray;
};
假设该类以某种方式为 分配内存intArray
,然后在析构函数中释放它,如果我像这样使用该类会怎样:MyClass* myClass = new MyClass();
并稍后释放它delete myclass;
如何delete
处理所有内存的释放?是否首先调用类析构函数来释放类分配的所有内存(即int* intArray
),然后释放分配给类的内存?
如果我有这样的课怎么办:
class MyClass
{
public:
MyClass();
~MyClass()
{
delete anotherMyClass;
}
//public members here
private:
MyClass* anotherMyClass;
};
假设anotherMyClass
没有分配构造函数,这会很快耗尽内存,如果有一个 MyClasses 链像链表一样相互连接怎么办?在这种情况下,析构函数中的删除语句会起作用吗?当析构函数被调用时,每个都会anotherMyClass
被递归释放吗?
您所知道的new
and语句是否有任何特定的奇怪技巧或警告?delete