在构造函数中使用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 ...
随机推荐
- xfsdump命令使用
一:使用xfsdump备份和恢复xfs文件系统 首先了解一下xfsdump的备份级别有以下两种,默认为0(即完全备份) 0 完全备 ...
- 【C语言】指针数组
题目:编写UNIX程序sort的简化版本,该程序按字母顺序对由文本行组成的集合进行排序. 思路:我们引入指针数组处理这种问题.如果待排序的文本行首尾相连地存储在一个长字符数组中,那么每个文本行可通过指 ...
- Spring Cloud问题分析
基于Spring Cloud框架开发时,经常会碰到各种开发问题,那么碰到这些问题时如何去解决呢?下面描述基于Spring Cloud问题定位的基本思路,大概可以分为如下几步: 排查配置问题 环境问题 ...
- 专注做好一件事(转) focus---这个世界上最成功的人,他们在某一领域获得成功之后,可通过经营杠杆进入任何他们想要涉足的领域。而这都得依赖于他们曾极致的专注在做好一件事情上。
- Fuel4d 2.3 公布
[版本号编号]:Fuel4D 2.3. [公布日期]:2014年10月20日. [编译环境]:UNICODE.VS2010.x86. [开发环境]:ANSI/UTF-8/UNICODE.VS2005/ ...
- js获取日期:昨天今天和明天、后天
<html> <head> <meta http-equiv="Content-Type" content="textml; charset ...
- 外部线程停止Java子线程的方法
一.Thread.stop()官方不推荐,Because it is inherently unsafe. 二.方式一1. 线程类示例 public class ThreadT1 implements ...
- 转:zTree树控件扩展篇:巧用zTree控件实现文本框输入关键词自动模糊查找zTree树节点实现模糊匹配下拉选择效果
是否可以借助于zTree实现文本框输入关键词自动模糊匹配zTree下拉树,然后选择下拉树内节点显示在文本框内且隐藏下拉树. 看到这个需求脑子里头大致已经想到了要如何实现这样一个需求,当时是限于时间问题 ...
- Package CJK Error: Invalid character code. 问题解决方法--xelatex和pdflatex编译的转换
Package CJK Error: Invalid character code. 问题解决方法--xelatex和pdflatex编译的转换 解决方法:添加格式说明信息 将下面语句: \docum ...
- java方法的继承,覆盖与重载
java中的继承使用extends关键字,在子类继承了父类之后将会获得父类的全部属性与方法(父类的构造器除外).如果在定义java类时没有显示定义她的父类,那么这个类默认将扩展java.lang.Ob ...