<CPP>模拟实现string类深浅拷贝

从构造,析构以及拷贝构造的方面理解string类的底层实现。

源代码获取:
https://github.com/akh5/C-/blob/master/STL/Mystring.cpp

string的底层通过字符指针char*通过构造函数申请对应大小的空间,并将指针指向其空间。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

namespace my
{
   
	class string
	{
   
	public:
		string(char* str = "")
		{
   
			if (nullptr == str)
				str = "";	
			//申请空间
			_str = new char[strlen(str)+1]; //“\0”
			strcpy(_str, str);
		}
		
		~string()
		{
   
			if (_str)
			{
   
				delete[] _str;
				_str = nullptr;
			}
		}
	private:
		char* _str;
	};
}

    构造时需要先给一个默认为空的字符粗,对应string str没=没有初始化的情况。构造函数中,需要人为申请一段比str多1的空间,可以放置str中的内容和一个’\0’。将_str指向申请的空间,用strcpy函数将str的内容赋值给_str。
    析构函数将开始申请的空间释放掉,并将_str指向空指针就完成析构

拷贝构造

深拷贝和浅拷贝概念的引入:https://blog.csdn.net/MPF1230/article/details/104023364

浅拷贝的实现相对简单,编译器默认的拷贝构造也是浅拷贝,但是浅拷贝的危害是,拷贝的对象结束调用析构函数时,会导致空间的二次释放

namespace my
{
   
	class string
	{
   
	public:
		string(char* str = ""
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值