【发布时间】:2015-07-12 04:12:00
【问题描述】:
这只是出于好奇,因为除了最基本的用途外,我没有在 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 和delete 语句是否有任何特定的奇怪技巧或注意事项?
【问题讨论】:
-
别忘了拥有自己的拷贝构造函数和赋值运算符。处理类的指针成员在其中动态分配的内存。
-
是的,你已经搞定了。您已经回答了所有自己的问题。
标签: c++ new-operator delete-operator