目录
1. 结构体的浅拷贝
相同类型的结构体变量可以整体赋值,默认赋值方式为:浅拷贝
浅拷贝:将结构体变量空间内容 赋值一份 到另一个相同类型的结构体变量空间中
如果结构体中没有指针成员 浅拷贝 不会带来问题。
如果结构体中有指针成员 浅拷贝 会带来多次释放堆区空间的问题。
struct Stu{int num ;char * name ;};Stu lucy ;lucy . num = 100 ;lucy . name = new char [ 32 ];strcpy ( lucy . name , "hello world" );Stu bob ;bob = lucy ;cout << bob . num << " " << bob . name << endl ;delete [] lucy . name ;delete [] bob . name ;
2. 结构体的深拷贝
如果结构体中有指针成员 尽量使用深拷贝
所谓的深拷贝,就是为结构体的指针成员 分配独立空间 然后再内容拷贝
![](https://img-blog.csdnimg.cn/c5bd28fbab8a4392a8f8efae1f071d0c.png)
struct Stu{int num ;char * name ;};Stu lucy ;lucy . num = 100 ;lucy . name = new char [ 32 ];strcpy ( lucy . name , "hello world" );Stu bob ;bob . num = lucy . num ;bob . name = new char [ 32 ];strcpy ( bob . name , lucy . name );cout << bob . num << " " << bob . name << endl ;delete [] lucy . name ;delete [] bob . name ;
3. 结构体变量在堆区 结构体的指针成员也指向堆区
struct Stu{int num ;char * name ;};// 结构体在堆区Stu * p = new Stu ;// 结构体中指针成员指向堆区p -> name = new char [ 32 ];// 赋值p -> num = 100 ;strcpy ( p -> name , "hello world" );cout << p -> num << " " << p -> name << endl ;// 释放空间delete [] p -> name ; // 先释放成员指向delete p ; // 再释放结构体