浅拷贝和深拷贝

本文通过示例代码详细介绍了浅拷贝与深拷贝的区别。浅拷贝仅复制对象本身,对于对象中引用的其他对象则共享内存地址;而深拷贝会为这些引用的对象也创建独立的副本,确保完全独立。文章通过修改赋值操作符来实现深拷贝的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简言之,

浅拷贝就是两个对象中的指针数据类型指向了同一个内存地址
深拷贝就是为被赋值对象申请了一个新的内存

如下如程序所示:

浅拷贝:
lass string
{
char *m_str;
public:
string(char *s)
{
m_str=s;
}
string(){};
string&operator=(const string s)
{
m_str=s.m_str;
return *this}
};
int main()
{
string s1("abc"),s2;
s2=s1;
cout<<s2.m_str;

}

 

深拷贝(修改赋值函数即可):

 

  string &operator=(const string &s)
 {
  if (strlen(m_str) != strlen(s.m_str))
  {
   m_str = new char[strlen(s.m_str)+1];
  }
  if (this != &s)
  {
   strcpy(m_str,s.m_str);
  }
  return *this;
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值