string里的substr的返回值深拷贝

该文讨论了C++中处理字符串子串时的边界检查和深拷贝概念。在创建子串时,会检查位置(pos)是否越界并抛出异常。通过深拷贝构造函数,确保返回的字符串副本在原始对象销毁后仍可安全使用。深拷贝避免了指针共享,保证了对象间的独立性。
摘要由CSDN通过智能技术生成

这个实现中,首先检查 pos 是否超出字符串范围。如果是,则抛出 异常。接着,根据 len 的值计算子串的长度,确保不会越界。然后,创建一个新的字符串对象 sub 来存储子串,并通过循环将子串的字符一个一个地复制到 sub 中。最后,返回 sub


当我们return tmp时,返回的是tmp临时拷贝对象,当tmp对象超出其作用域时,存放tmp对象的内存地址被销毁。在C++中,变量的生命周期由其作用域确定。在这段代码中,tmp对象是在substr函数内部创建的局部变量。

当程序执行到函数的结尾时,tmp对象所占用的内存将会被释放,该对象将被销毁。这是因为tmp是一个自动变量,它的生命周期限定在函数的作用域内。

在这种情况下,由于函数返回了tmp的副本给调用者,即使tmp对象被销毁,调用者仍然可以使用函数返回的字符串副本。但需要注意的是,这并不意味着tmp对象在超出作用域后仍然存在,而只是已经复制的副本可供调用者使用。


所以此时我们需要自己写一个string的深拷贝构造函数

 

深拷贝是指创建一个新对象,并将源对象的所有数据成员复制到新对象中,包括基本类型数据和指针所指向的内存内容。因此,在深拷贝中,新对象会拥有自己的内存空间,与源对象完全隔离,修改其中一个对象不会影响另一个对象。当对象包含指针时,深拷贝将会为目标对象分配新内存,并将源对象指针指向的内容复制到新内存中,从而避免了指针共享所带来的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值