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