对象/对象指针 以及背后的堆栈

对象:构造一个新的对象时,在栈上为其分配内存,自动调用析构函数,不须要主动调用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[]效果是同样的

相关文章
相关标签/搜索