博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
String类的写时拷贝
阅读量:6347 次
发布时间:2019-06-22

本文共 1645 字,大约阅读时间需要 5 分钟。

String类的写时拷贝

#include
#include
using namespace std;class String{public: friend ostream& operator <<(ostream &os, String &str); String(char *str = "") :_str(new char[strlen(str) + 1 + 4]) { _str = _str + 4; getCount() = 1; strcpy(_str, str); } String(String &str) :_str(str._str) { ++getCount(); } String &operator=(String &str) { if (this != &str) { release(); _str = str._str; ++getCount(); } return *this; } char &operator[](int index) { assert(index >= 0); assert(index<(int)strlen(_str)); if (getCount()>1) { --getCount(); char *temp = new char[strlen(_str) + 4 + 1]; strcpy(temp + 4, _str); _str = temp + 4; getCount() = 1; } return _str[index]; } ~String() { release(); }private: void release() { if (_str&&(--getCount() == 0)) { delete[](_str-4); _str = NULL; } } int &getCount() { return *(int*)(_str - 4); } char *_str;};ostream &operator<<(ostream &os, String &str){ os << str._str; return os;}void test1(){ String str1("hello "); String str2(str1); String str3("world"); String str4(str3); str1[0] = 'c'; str1[1] = 'h'; str1[2] = 'a'; str1[3] = 'n'; str1[4] = 'g'; str1[5] = 'e'; str2 = str3; cout << str1 << endl; cout << str3 << endl;}int main(){ test1(); system("pause"); return 0;}

转载于:https://www.cnblogs.com/readlearn/p/10806524.html

你可能感兴趣的文章
记一次lnmp 502故障
查看>>
mybatis异常 :元素内容必须由格式正确的字符数据或标记组成。
查看>>
RHEL7/CENTOS7
查看>>
【小松教你手游开发】【unity实用技能】NGUI Depth探索
查看>>
Luogu P2444 病毒___AC自动机+dfs
查看>>
solidity智能合约[51]-安全—dos***
查看>>
dubbo源码分析-集群容错(二)
查看>>
【Oracle 12c】最新CUUG OCP-071考试题库(55题)
查看>>
Docker搭建ELK日志监控
查看>>
经济日报 | SAP:对中国市场未来发展充满信心
查看>>
系统启动流程
查看>>
oracle语法
查看>>
艾肯声卡安装调试方法【必看】
查看>>
jquery 中的focus()无效的问题
查看>>
修复无法访问的GPO
查看>>
flex4里的state
查看>>
android 动画
查看>>
Android之Intent和常用Action
查看>>
nginx 配置tomcat 实现负载均衡
查看>>
构建postfix邮件服务器(五)extmail和extman的安装,实现web使用和管理邮件系统...
查看>>