c++对象赋值问题 5
2个回答
展开全部
比如拿一个创建链表举例。
里面有函数
MakeList();//创建链表 用动态方法
ShowList();//输出链表
DestroyList();//销毁链表
用这个类创建对象a,b。
a.MakeList();
b=a;
a.DestroyList();
b.ShowList(); // 程序到这里会出错。
类b被类a赋值后,如果你没有重载操作符“=”,就没有把动态分配的数据拷贝过去,这叫浅拷贝。
类b想要访问动态数据时,是跑到类a创建的数据里面访问了。
类b想要访问动态数据时,严重依赖类a。
也就是,当动态数据被类a销毁后,b将无法调用那些动态分配的数据。
如果b不调用那些动态分配的数据,什么事都没有。
想解决这个问题,两个建议。
1.建立专门拷贝的函数
2.重载操作符"="。
这样,即使类a把动态数据删除了,类b也可以继续进行动态数据的访问。类a无论干什么,类b什么事都没有了。
里面有函数
MakeList();//创建链表 用动态方法
ShowList();//输出链表
DestroyList();//销毁链表
用这个类创建对象a,b。
a.MakeList();
b=a;
a.DestroyList();
b.ShowList(); // 程序到这里会出错。
类b被类a赋值后,如果你没有重载操作符“=”,就没有把动态分配的数据拷贝过去,这叫浅拷贝。
类b想要访问动态数据时,是跑到类a创建的数据里面访问了。
类b想要访问动态数据时,严重依赖类a。
也就是,当动态数据被类a销毁后,b将无法调用那些动态分配的数据。
如果b不调用那些动态分配的数据,什么事都没有。
想解决这个问题,两个建议。
1.建立专门拷贝的函数
2.重载操作符"="。
这样,即使类a把动态数据删除了,类b也可以继续进行动态数据的访问。类a无论干什么,类b什么事都没有了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询