果然,光看书是没用的,一编程序,很多问题就出现了--
注意事项: 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时的注意事项的更多相关文章

  1. Mvc Session 设置以后再构造函数中取值时为null问题

    在登录界面写了一个session在 别的页面的构造函数中获取始终未null  后来改成 System.Web.HttpContext.Current.Session["User"] ...

  2. 直接添加viewController中的view时的注意事项

    直接添加viewController中的view时需要注意一个问题,比如: MyTestViewController *vc = [MyTestViewController new]; [self.v ...

  3. 关于开发中使用writeToFile时的注意事项

    总会有一些坑在前面等着你 我们先来看一下后台返回的部分json数据,稍后再来分析问题,仔细看一下userId和userCode两个字段,其他不用看 "list": [{ " ...

  4. Golang中进行reslice时的注意事项

    先看下面代码: package main import "fmt" func main() { slice := []int{0, 1, 2, 3, 4, 5, 6, 7, 8} ...

  5. 修改NSMutableArray中的元素时的注意事项

    最近做项目遇到从文件加载数组,并对数组中的元素进行操作的问题,特意写了个Demo,记录下要注意的东西: 代码如下: NSArray *array = @["]; NSMutableArray ...

  6. mysql中使用正则表达式时的注意事项

    mysql不支持\d元字符匹配数字 mysql不支持向前.向后查找 regexp不能和not搭配使用

  7. DLL中使用字符串时的注意事项。

    library dll1; uses SysUtils, Classes; {$R *.res} function TESTDLL:string;stdcall; begin Result:='tes ...

  8. Android中自定义样式与View的构造函数中的第三个参数defStyle的意义

    零.序 一.自定义Style 二.在XML中为属性声明属性值 1. 在layout中定义属性 2. 设置Style 3. 通过Theme指定 三.在运行时获取属性值 1. View的第三个构造函数的第 ...

  9. 尝试解决在构造函数中同步调用Dns.GetHostAddressesAsync()引起的线程死锁

    (最终采用的是方法4) 问题详情见:.NET Core中遇到奇怪的线程死锁问题:内存与线程数不停地增长 看看在 Linux 与 Windows 上发生线程死锁的后果. Linux: Microsoft ...

随机推荐

  1. 合格linux运维人员必会的30道shell编程面试题及讲解

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://oldboy.blog.51cto.com/2561410/1632876 超深度 ...

  2. VC对话框使用OnEraseBkgnd函数位图背景并透明

    1.使用OnEraseBkgnd函数实现对话框位图背景 BOOL CDisplayBmpBackGroundDlg::OnEraseBkgnd(CDC *pDC) { CRect rect; GetC ...

  3. IDEA git修改远程仓库地址

    方法有三种: 方法1.修改命令 git remote set-url origin <url> 方法2.先删后加 git remote rm origin git remote add o ...

  4. 实现超级简单的bug管理系统

    大家可以试着去实现一个超级简单的bug管理系统 不需要鉴权,也就是不需要登陆 有tag管理功能,缺陷上可以加tag,通过tag区分bug的状态和类型 bug的增删改查功能 bug描述支持markdow ...

  5. OPENSSL编程起步

    原文链接: http://blog.csdn.net/itmes/article/details/7711076 WINDOWS平台下OPENSSL的编译和安装使用 OPENSSL是开放源代码的,可以 ...

  6. 【OpenCV】给图像加入噪声

    图像噪声使图像在获取或是传输过程中收到随机信号干扰,妨碍人们对图像理解及分析处理的信号.非常多时候将图像噪声看做多维随机过程,因而描写叙述噪声的方法全然能够借用随机过程的描写叙述,也就是使用随机过程的 ...

  7. ElementUI 按需引入坑爹的点记录

    官网说的是这样的: 但实际上,应该是这样修改: { "presets": [ ["env", { "targets": { "br ...

  8. chrome 版本 29.0.1547.76 m 解决打开新标签页后的恶心页面的问题

    个人非常不喜欢这个版本的新标签页的样子,特别是一再输入框中输入要搜索的东西,自动跑到标题栏中去了,比吃屎还恶心.下面是解决办法: 在地址栏输入:chrome://flags/ 按Ctrl+F,输入下面 ...

  9. kafka 配置文件注释

    文章转载自:http://liyonghui160com.iteye.com/blog/2163899 server.properties配置: server.properties中所有配置参数说明( ...

  10. Vue(三):vuex是什么

    vuex官网介绍 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化.Vuex 也集成到 Vue ...