在构造函数中使用new时的注意事项
果然,光看书是没用的,一编程序,很多问题就出现了--
注意事项: 1、 如果构造函数中适用了new初始化指针成员,则构析函数中必须要用delete
2、 new与delete必须兼容,new对应delete,new[]对应delete[]
3、如果有多个构造函数,则必须以相同的方式使用new,要么都是new,要么都是new[],因为构析函数只能有一个
4、 应该定义一个复制构造函数,通过深度复制,将一个对象初始化为另一个对象
5、 应该定义一个赋值运算符,通过深度复制,将一个对象复制给另一个对象 #include<iostream>
#include<cstring>
#include<fstream>
using namespace std;
class String
{
private:
char *str;
int len;
static int num_string; public:
String();
String(const char *s);
String(const String &s);
~String();
friend ostream& operator<<(ostream &os,String s);
String operator=(const String &s)
{
if(this==&s) return *this; len=s.len;
delete [] str;
str=new char[len+1];
strcpy(str,s.str);
return *this;
}
};
int String::num_string=0;
String::String()
{
len=4;
str=new char[len+1];
strcpy(str,"C++");
num_string++;
}
String::String(const char *s)
{
len=strlen(s);
str=new char[len+1];
strcpy(str,s);
num_string++;
}
String::String(const String &s)
{
len=s.len;
num_string++;
str=new char[len+1];
strcpy(str,s.str);
}
String::~String()
{
num_string--;
delete [] str;
printf("--- %d\n",num_string);
}
ostream& operator<<(ostream &os,String s)
{
os<<s.str;
return os;
}
int main()
{
String p("wwwww");
String p1("qqqqqq");
String p2;
p2=p1;
cout<<p<<endl<<p1<<endl<<p2<<endl;
return 0;
}
在构造函数中使用new时的注意事项的更多相关文章
- Mvc Session 设置以后再构造函数中取值时为null问题
在登录界面写了一个session在 别的页面的构造函数中获取始终未null 后来改成 System.Web.HttpContext.Current.Session["User"] ...
- 直接添加viewController中的view时的注意事项
直接添加viewController中的view时需要注意一个问题,比如: MyTestViewController *vc = [MyTestViewController new]; [self.v ...
- 关于开发中使用writeToFile时的注意事项
总会有一些坑在前面等着你 我们先来看一下后台返回的部分json数据,稍后再来分析问题,仔细看一下userId和userCode两个字段,其他不用看 "list": [{ " ...
- Golang中进行reslice时的注意事项
先看下面代码: package main import "fmt" func main() { slice := []int{0, 1, 2, 3, 4, 5, 6, 7, 8} ...
- 修改NSMutableArray中的元素时的注意事项
最近做项目遇到从文件加载数组,并对数组中的元素进行操作的问题,特意写了个Demo,记录下要注意的东西: 代码如下: NSArray *array = @["]; NSMutableArray ...
- mysql中使用正则表达式时的注意事项
mysql不支持\d元字符匹配数字 mysql不支持向前.向后查找 regexp不能和not搭配使用
- DLL中使用字符串时的注意事项。
library dll1; uses SysUtils, Classes; {$R *.res} function TESTDLL:string;stdcall; begin Result:='tes ...
- Android中自定义样式与View的构造函数中的第三个参数defStyle的意义
零.序 一.自定义Style 二.在XML中为属性声明属性值 1. 在layout中定义属性 2. 设置Style 3. 通过Theme指定 三.在运行时获取属性值 1. View的第三个构造函数的第 ...
- 尝试解决在构造函数中同步调用Dns.GetHostAddressesAsync()引起的线程死锁
(最终采用的是方法4) 问题详情见:.NET Core中遇到奇怪的线程死锁问题:内存与线程数不停地增长 看看在 Linux 与 Windows 上发生线程死锁的后果. Linux: Microsoft ...
随机推荐
- Webdriver设置Firefox自动下载
看到很多人在firefox上操作下载窗口用autoit,太麻烦了,提供一种用profile来解决的办法: FirefoxProfile profile = new FirefoxProfile(); ...
- 远程首次连接mysql速度慢的解决方法:skip-name-resolve取消DNS的反向解析(转)
PHP远程连接MYSQL速度慢,有时远程连接到MYSQL用时4-20秒不等,本地连接MYSQL正常,出现这种问题的主要原因是,默认安装的 MYSQL开启了DNS的反向解析,在MY.INI(WINDOW ...
- git web开发版本管理
使用git来管理web开发: 我们需要做的事情 : 1,在服务器建立版本仓库: 2,在服务器建立稳定版本的站点,编写版本仓库的hooks: 3,在开发服务器上提交开发版本: 下面一步一步来:(注意建立 ...
- thinkphp导航高亮的方法
因为引入了公共的 header.html,所以需要使用 js来实现向 li 加入active的高亮属性,这里我通过url地址和href的地址进行判断 // 这里对当前页面导航高亮 $(function ...
- mvc 文件压缩 减少文件大小
using System; using System.Collections.Generic; using System.IO.Compression; using System.Linq; usin ...
- ldd 的一个安全问题
我们知道“ldd”这个命令主要是被程序员或是管理员用来查看可执行文件所依赖的动态链接库的.是的,这就是这个命令的用处.可是,这个命令比你想像的要危险得多,也许很多黑客通过ldd的安全问题来攻击你的服务 ...
- ArcGIS 10.2数字化线状要素时自己主动拼接成一条线
一開始一直和捕捉和经典捕捉过不去.最后才发现找错了地方,原来要Customize.自己定义加入"Continue Feature"工具,将其拖动到界面上的随意工具条内就可以.如图1 ...
- 学习笔记之 curl 命令用法详解
[前言] 本文翻译和整理自 Linux-2.6.32 中和 curl 相关的 Manual Page 描述文档. 文档目的仅在提醒读者所遗忘的知识点,故在整理时削弱了阅读流畅性,适用于对 cu ...
- Shell脚本开发规范
一.前言 由于工作需要,最近重新开始拾掇shell脚本.虽然绝大部分命令自己平时也经常使用,但是在写成脚本的时候总觉得写的很难看.而且当我在看其他人写的脚本的时候,总觉得难以阅读.毕竟shell脚本这 ...
- FreeSWITCH协议参数之自定义sip header
一.主动发送 1. 加入sip_h_前缀 这样FreeSWITCH就能自动加上后面的扩展头. 2. 示例 <action application="set" data=&qu ...