String类中的写时拷贝函数

本文探讨了C++中String类的写时拷贝(Copy-on-Write, COW)机制。COW结合了浅拷贝和深拷贝的优点,仅在对象内容被修改时进行深拷贝,以提高效率。文中详细解释了COW的设计思想,即利用计时器跟踪对象的赋值行为,并给出了具体的实现代码。" 4861311,278432,使用Java Servlet Filter实现Web登录注销过滤,"['servlet', 'filter', 'web开发', 'java']

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

拷贝函数

拷贝函数分为浅拷贝和深拷贝,浅拷贝是系统自带的一个函数,它的功能是让两个指针指向同一块内存空间来实现内存共享。深拷贝函数是用户根据需求自定义的一个函数,它的功能是让每个对象都有一块独立的内存空间
写时拷贝就是集合了浅拷贝和深拷贝的特性,当我们在调用点只做访问时,用浅拷贝就行。当我们要在调用点修改已存在对象的某个字符时,调用深拷贝函数。
设计思想:定义一个计时器,计时器存放在字符串中。每将一个已存在的对象赋值给新对象时,计时器自加;当调用点需要改变某个自负床中的一个字符时,就调用深拷贝来开辟一块新空间,并在新空间重新定义一个计时器。也就是说,每个字符串对象中都存放着一个四个字节大小的计时器。当增加一个指向时计时器自加,释放某个指向时,字符串自减。
具体代码(包含注释)如下:

#include<iostream>
class string 
{
   
	string(char* str)
	{
   
		mstr = new char[strlen(str) + 1 + 4]();            //开辟空间时多开辟四个字节的空间用来存放计时器
		mstr += 4;                                         //将空间大小往后移4个字节,前面四个字节用来存放计时器,后面的字节用来存放字符串
		strcpy_s(mstr, strlen(str) + 1, str);
		getref() = 1;       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值