C++学习之使用new的注意事项
      在构造函数中使用new来初始化对象的指针成员成员时必须特别小心,具体的说,应该如下这样做:
一、如果在构造函数中使用new来初始化指针成员,则应该在析构函数中使用delete;
二、new和delete必须相互兼容,new对应于delete,new[]对应于delete[];
三、如果有多个构造函数,则必须以相同的方式使用new,要么都带中括号,要么都不带。因为只有一个析构函数,因策所有的构造函数都必须与它兼容。不过,可以在一个构造函数中使用new来初始化指针,而在另一个构造函数中将指针初始化为空(NULL或者0),这是因为delete可以用于空指针。
四、应该定义一个复制构造函数,通过深度复制讲一个对象初始化为另一个对象。通常这种复制构造函数和下面的模板类似:
string::string(const string &st)
{
     num_strings++;//处理静态成员变量,可以记录程序中新增变量的数量;
     len=st.len;
     str=new char[len+1];
     std::stcpy(str,st.str);
}
五、具体的说,复制构造函数应该分配足够的空间来存储复制的数据,并复制数据,而不仅仅是数据的地址,另外,还应该更新所有受影响的静态类成员;
六、应当定义一个赋值操作符,通过深度复制将一个对象复制给另一个对象。通常,这种赋值操作符和下面的模板类似:
string &string::operator=(const string &st)
{
     if(this==&st)
           return  *this;
     delete[]str;
     len=st.len;
     str=new string[len+1];
    std::strcpy(str,st.str);
    return *this;
}
具体的说,该方法应该完成这些操作:检查自我赋值的情况,释放成员指针以前指向的内存,复制数据而不仅仅是数据的地址,并返回一个指向调用对象的引用。

C++学习之使用new的注意事项的更多相关文章

  1. springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验--异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档---jpa访问数据库及page进行分页---整合redis---定时任务

    springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验-- 异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档 ...

  2. Django学习之五:Django 之 注意事项及汇总

    目录 Django 之 注意事项及汇总 全局 settings model模块-模型模块 URLs模块 Templates System 模版模块 View/HttpRequest/HttpRespo ...

  3. 跟我从零基础学习Unity3D开发--U3d脚本注意事项及两个基本函数的简单介绍

    经过上一篇的学习,我相信开发环境您已经搭好了,如果还没有搭好可以百度一下. 今天主要讲的有以下几点: 第一:Unity3D中的C#脚本与.net中的C#写法的区别 1.Unity3D C#脚本不支持命 ...

  4. DevExtreme学习笔记(一) DataGrid中注意事项

    1.阻止cell编辑 config.onEditorPreparing = function (e) { if (e.dataField === 'xx' && e.row.data. ...

  5. 【java】学习路线12-内部类的使用事项

    //内部类只能在其外部类当中使用//局部内部类:定义在方法里面//如果内部类和外部类有重名,就近原则在内部类中优先访问内部类.//如果想访问宿主类的同名成员,使用OuterClass.this.xxx ...

  6. Hadoop学习(4)-mapreduce的一些注意事项

    关于mapreduce的一些注意细节 如果把mapreduce程序打包放到了liux下去运行, 命令java  –cp  xxx.jar 主类名 如果报错了,说明是缺少相关的依赖jar包 用命令had ...

  7. java8学习之Collector复合与注意事项

    接着上一次[http://www.cnblogs.com/webor2006/p/8318066.html]继续对Collector进行javadoc详读,上一次读到了这: 接下来一条条来过目一下: ...

  8. php学习第一天(记录注意事项)

  9. vue学习(十一) v-for使用的注意事项:2.2.0+之后的版本里,当在组件中使用v-for时,key是必须的,它是用来表示唯一身份的

    //html <div id="app"> <div> <label>id <input type="text" v- ...

随机推荐

  1. POJ3253 Fence Repair(贪心)

    分割木板的顺序是自由的,所以每次选择两块最短的板,组合在一起,增加队列,原来两个板出队,直到队列中为空或者仅仅剩下一个板时结束.这里使用优先队列较为方便. #include<iostream&g ...

  2. Repeater获取某一行TextBox值

    TextBox tb = (TextBox)e.Item.FindControl("TextBoxID");

  3. ASP.NET不通过添加web引用的方式调用web service接口

    尊重原著作:本文转载自http://bbs.csdn.net/topics/360223969 创建方法 //动态调用web服务 public static object InvokeWebSer(s ...

  4. 查看EBS R12应用中使用CONTEXT_FILE的版本及路径

    SELECT * FROM APPLSYS.FND_OAM_CONTEXT_FILES;

  5. [转]不用Cookie的“Cookie”技术

    有另外一种比较隐蔽的用户追踪技术,不使用cookie或者Javascript.很多网站已经在用了,但知道的人不多.本文就来介绍一下这种技术是如何追踪用户,用户又该如何避免追踪. 这种技术不依赖于: C ...

  6. Spring MVC JSON 实现JsonSerializer Date类型转换

    转载至:http://blog.csdn.net/lantianzhange/article/details/40920933 在Spring MVC中存在两大类的类型转换,一类是Json,一个是Sp ...

  7. 20151217--Ajax的一点补充

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. OC语法3——点语法,self关键字

    点语法:   为了给程序员提供便捷,OC中也引入了点语法.不过它和Java中点语法的意义是完全不同的. 在Java中无论调用任何方法,还是访问public类型的成员变量都是用点语法(.号). 而在OC ...

  9. 使用jQuery出现the function undefined

    出现function undefined往往是相关的JS文件没有导入导致,在相关文件都导入的情况下,使用jQuery提供的方法还会出现function undefined错误,或许就是jQuery对象 ...

  10. Moutain Tai notes

    rest 40shaxian 18 drumsticks  13零食 11.5+21车费5门票62大衣10面14 > 194.5 notes :::: 岗位职责:1.基于Drupal系统的产品功 ...