强调一下几个重点:
(1)new 操作符申请内存失败,是抛出异常,并不是返回NULL,若想申请失败返回NULL,需要加 (std::nothrow);
(2)使用std::nothrow 需要加头文件 #include<new>
(3)使用assert
(4)构造函数有参数时最好加默认参数,这样就有默认构造函数了,且不要忘了定义为const
(5)赋值操作符函数体if语句中的条件必须是 this != &other,为什么if(*this != other)不行????
刚想了下原因是:定义的类型没有!=操作符啊,怎么可以比较呢,只能比较指针了。。。
#include<stdio.h>
#include<string.h>
#include<assert.h>
#include<iostream>
#include<new>
using namespace std;
class String
{
private:
char *m_data;
public:
String(const char *str = NULL);
~String();
char * get_m_data() {return m_data;}
String(const String&);
String& operator= (const String &);
};
String::String(const char *str)
{
if(str == NULL)
{
m_data = new (std::nothrow) char[1];
assert(m_data != NULL);
*m_data = '\0';
}else
{
m_data = new (std::nothrow) char[strlen(str) + 1];
assert(m_data != NULL);
strcpy(m_data, str);
}
}
String::~String()
{
if(m_data != NULL)
{
delete []m_data;
m_data = NULL;
}
}
String::String(const String &other)
{
m_data = new (std::nothrow) char[strlen(other.m_data) + 1];
assert(m_data != NULL);
strcpy(m_data, other.m_data);
}
String& String::operator= (const String &other)
{
if(this != &other)
{
String tmp(other);
char *str = tmp.m_data;
tmp.m_data = m_data;
m_data = str;
}
return *this;
}
int main()
{
String s1("a big brother is watching you!!!");
String s2(s1);
//printf("haha\n");
String s3;
s3 = s1;
printf("%s\n", s1.get_m_data());
printf("%s\n", s2.get_m_data());
printf("%s\n", s3.get_m_data());
return 0;
}
文章浏览阅读1k次。题目描述从键盘输入一个字符,判断该字符是否大写字母、小写字母、数字字符或其他字符。分别输出对应的提示信息。输入输入一个字符。输出如果该字符是大写字母,则输出“upper”;若是小写字母,则输出“lower”;若是数字字符,则输出“digit”;若是其他字符,则输出“other”。(输出不含双引号)。样例输入E样例输出upper先调到java再提交import java.util.*;public class Main{ public static ._由键盘输入一个字母,判断该字母是否为小写字母
文章浏览阅读4.4k次。Office 2007 x32,Win7 x64 安装OleDB驱动Office 2007、2010的Ace引擎都是Microsoft.ACE.OLEDB.12.0,这点从微软AccessDatabaseEngine包中可以得知。下面我们就来解决x32、x64下OLE驱动的安装。 Microsoft Access 2010 数据库引擎可再发行程序包Acces_oledb驱动安装
文章浏览阅读391次,点赞10次,收藏5次。对于众多跨境卖家而言,使用热门社交平台进行引流已成为常态,而TikTok作为全球短视频平台,吸引了来自全球的用户,成为众多商家争相开拓的新蓝海。要在中国运营TikTok账号,普通的手机不太方便,试试全新的海外云手机吧!_可以用云手机玩tiktok吗
文章浏览阅读339次。二分+最大流。首先可以发现如果t时间可以全部撤离,那么所有大于t的时间都可以撤离,于是考虑二分。又发现其实一个人往一个门走,走的肯定是最短路,于是可以计算出每个人到每个门的最短路。每一个人看作一个流量,由源点向每个人连容量为1的边。将每个门拆点表示每个时间出去的人(对于一个门C可以拆成编号为C+1,C+2,C+3,C+4……都向汇点连容量1的边),最多拆400个。每个人向每个门的【C+最短路距离】点
文章浏览阅读149次。自动配置bond脚本(0-6)_网卡bond0脚本
文章浏览阅读1.7k次,点赞2次,收藏8次。H264编码流程手绘图:H264编码网上图:_h.264编码流程
文章浏览阅读3k次。作者 |马超责编 | 伍杏玲出品 | CSDN(ID:CSDNnews)鹰击长空,鱼翔浅底,万类霜天竞自由。——《沁园春·长沙》去年底,一国外程序员写的《中国的开源项目正在破坏 Git..._中国 程序员 开源
文章浏览阅读623次。在windows7上用IIS配置时出现这种错误,原因是在对应站点目录的IUSR的权限没设造成的...在属性——>安全——> 高级 中把IUSR用户找出来添加好_bolg.csdn.net/we
文章浏览阅读90次。多输入多输出 | Matlab基于麻雀算法优化卷积神经网络(SSA-CNN)多输入多输出预测,麻雀算法优化卷积神经网络(SSA-CNN)的回归预测_卷积神经网络算法预测
文章浏览阅读1.2k次,点赞3次,收藏28次。四音调 六音阶_电子琴按键分频程序编写
文章浏览阅读154次。单片机学习笔记,主要是以arduino开发板为主。_arduino单片机学习心得
文章浏览阅读503次。自分离式腔体的耳机首次推出之后,真无线耳机的风潮席卷世界。很明显,真无线耳机让用户体验到了耳机与身体一体而行的自由体验,观感体验可谓是颠覆性的。蓝牙耳机的好处显而易见:首先,摆脱线材束缚,真正实现无拘无束这一点是显而易见的,纯粹的真无线蓝牙耳机再也没有线材的连接,真正的解放双手,并且轻盈、自在。在有些特定场合,比如运动、通勤等场合,一款真无线蓝牙耳机绝对是首选。其次,开启新的音频传输方式,真无线蓝牙耳机时代对比传统的入耳式“无线蓝牙耳机”,真无线蓝牙耳机的连接不仅是耳机和信号发射设备之间_jbl为什么只支持sbc