c++对象拷贝机制
假设有一个类对象class,使用 A a; A* a = new A();一个分配在栈,一个分配在堆,更深的解释呢?
自动资源
- 会被自动回收的资源,在一个函数内手动声明的变量会在函数结束时被释放,局部变量都是自动资源,有自己的作用域(生命周期)
void fun(){
int a = 10;//局部变量
}
手动资源
- 使用new手动分配,使用delete手动回收,在一个函数创建一个指针。new分配一个指定大小的手动资源分配给一个指针b指向。指针b是一个指针常量,是自动资源,相当于失去了对手动资源的索引,叫做野内存
void fun(){
int *b = new int();
}
举例说明
- a和b是两块不同的内存,b将其内存中的数据拷贝给a
- a和b是指向两块不同内存的地址,这里是b指向的地址赋值给a,两个指针同时指向b指向的地址,a成为了野内存
- c++ 创建对象的两种方式是c++区别其他语言的一大特色
深拷贝和浅拷贝
~未完待续