对象:构造一个新的对象时,在栈上为其分配内存,自动调用析构函数,不需要主动调用delete函数。
对象指针:new一个对象指针时,首先在堆上创建一个对象,再将对象资源的首地址赋值给对象指针。其内存需要调用delete显式释放,调用delete函数时,会将其在堆上的资源全部释放,但对象指针仍然指向那块内存,所以需要将对象指针赋值为空。
总结:堆上的资源需要主动delete,所以若在构造函数中使用了new来初始化了类的某个对象指针成员,析构函数中需要记得调用delete函数释放其资源。
程序里面的static变量 常量 malloc分配的内存 对象指针所指向的内存,都在堆上。堆内存在函数退出时,不会被释放,其地址是可以作为函数的返回值的。
delete和delete[]的区别:
类对象(c++中string是一个类):
A *a = new A[10]
//delete a;//释放a指向的全部内存,调用a[0]对象的析构函数。
delete[] a;//释放a指向的全部内存,调用a[0]~a[9]的全部析构函数。
内置的数据类型:
如int double等,他们不是类,没有析构函数,所以delete和delete[]效果是一样的