C++ C3 -深拷贝与浅拷贝-new和delete-初始化成员列表-构造中调用构造-静态static-this指针-友元-const

一、深拷贝与浅拷贝
浅拷贝:没有自己写拷贝构造函数,导致程序出现要拷贝的时候调用了默认的拷贝构造函数,在普通的变量上不会有什么影响但是对于指针而言,会造成野指针现象。
默认拷贝构造函数,只是单一的复制,在普通变量上就是把数值复制过来,这不会有什么问题,但是涉及到指针,默认拷贝构造函数做的也是仅仅将指针地址复制过来。这就出现问题了,我们希望的是:一开始有一个对象A,然后对象B要来做拷贝。B对象应该重新开辟一块空间存储对象A的那个指针所指向地址中存的数据。但是默认拷贝构造必不会重新开辟空间,仅仅是将B的指针指向A的地址。这就导致在析构对象时,A对象的指针地址已经回收了,但是B对象的指针仍然指向那块空间。在B对象析构时,就会出错,因为那块空间已经没了,但是你还要去释放,就导致段错误。这一错误是在运行阶段出现的,编译时并不会报错!
在这里插入图片描述

class Student{
   
private:
    char* name;
    int id;
public:
    Student(int id,char* name);
    ~Student();
};

Student::Student(int id,char* name){
   
    this->id=id;
    this->name=(char*)malloc(sizeof(char)*10);
    strcpy(this->name,name);

}
Student::~Student(){
   
    if(name!=NULL){
   
        free(name);
        name=NULL;
    }
}
int main(){
   
    char a[10]="hello";
    Student S1(10,a);
    Student S2=S1;//程序结束以后就会出运行错误
    return 0;
} 

深拷贝
手动写拷贝构造函数,给指针分配空间

Student::Student(const Student& obj)
{
   
		m_age = obj.m_age;
		m_name = (char*)malloc(sizeof(char)*
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值