定义变量时,必须指定其数据类型和名字。而动态创建对象时,只需指定其数据类型,而不必为该对象命名。取而代之的是,new表达式返回指向性创建的指针。

1.动态创建对象的默认初始化

对于类类型的对象,用该类的默认构造函数初始化;而内置类型的对象则无初始化。

string *ps = new string;   //initialized to empty stringint *pi = new int;  //pi points to an uninitialized int

对于内置类型或没有定义默认构造函数的类型,采用不同初始化方式则有显著的差别:

int *pi = new int;  //pi points to an uninitialized intint *pi = new int( ); //pi points to an int value-initialized to 0

第一个语句的int型变量没有初始化,而第二个语句的int变量这被初始化为0.

2.如果new表达式无法获取需要的内存空间,系统将抛出名为bad_alloc的异常。

3.如果指针的值为0,则在其上做delete操作时合法的,但这样做没有任何意义:

 int *ip = 0;delete ip;

C++保证:删除0值的指针式安全的。

4.删除指针后,该指针变成悬垂指针。悬垂指针指向曾经存放对象的内存,但该对象已经不再存在了。悬垂指针往往导致程序错误,而且很难检测出来。

转载于:https://www.cnblogs.com/wangfengju/p/6173020.html

C++ Primer 有感(new和delete表达式)相关推荐

  1. C++ 学习笔记(19)new/delete表达式、定位new、typeid、dynamic_cast、type_info、枚举类型、成员函数指针、union、位域、volatile限定符、链接指示

    C++ 学习笔记(19)new/delete表达式.定位new.typeid.dynamic_cast.type_info.枚举类型.成员函数指针.union.位域.volatile限定符.链接指示 ...

  2. C++Primer 第10章lambda表达式

    C++Primer 第10章lambda表达式 泛型编程 咱们继续高歌猛进,下面我给大家继续讲关于算法的故事. 我们知道标准库容器中定义的算法大多数独立在算法之外,通常这些算法是通用的.它们可以处理不 ...

  3. C++ 学习笔记之(19) new、delete表达式、RTTI(运行时类型识别)、枚举、类成员指针、嵌套类、局部类、位域、volatile、extern C

    C++ 学习笔记之(19) new.delete表达式.RTTI(运行时类型识别).枚举.类成员指针.嵌套类.局部类.位域.volatile.extern C C++ 学习笔记之(19) new.de ...

  4. C++ Primer 有感(类)

    1.在类内部,声明成员函数时必需 的,而定义成员函数则是可选的.在类内部定义的函数默认为inline. 2.const成员函数不能改变其所操作的对象的数据成员.const必须同时出现在声明和定义中,若 ...

  5. C++ Primer 有感(重载操作符)

    1.用于内置类型的操作符,其含义不能改变.也不能为任何内置类型定义额外的新的操作符.(重载操作符必须具有至少一个类类型或枚举类型的操作数.这条规则强制重载操作符不能重新定义用于内置类型对象的操作符的含 ...

  6. C++ Primer 第三版 读书笔记

    1.如果一个变量是在全局定义的,系统会保证给它提供初始化值0.如果变量是局部定义的,或是通过new表达式动态分配的,则系统不会向它提供初始值0 2.一般定义指针最好写成:" string * ...

  7. new,delete总结

    一 数组和new 数组类型变量三个重要限制: 1 数组长度不变 2 在编译时必须知道其长度 3 数组只在定义它的块语句内存在 突破数组的限制 针对2 需要在运行时动态的分配数组 针对3 动态分配的数组 ...

  8. android jni new/delete 和 new[]/delete[]

    今天,简单讲讲android里再jni使用new时如何释放内存. 这个其实是和C++有关的知识,不过jni编程时还是需要注意的.所以这里记录一下. new 和 delete 到底是什么? 如果找工作的 ...

  9. new和delete

    和 sizeof 类似,sizeof不是函数,它是一个操作符,它在编译期就完成了计算,在函数运行期间它已经是一个常数值了. int a; sizeof(int) = 4; sizeof(a) = 4; ...

最新文章

  1. Tensorflow相关面试题
  2. 程序员如何年薪百万?深度学习必读书籍!
  3. 递推极大似然算法实现
  4. 开源工业物联网数据库 Apache IoTDB 毕业成为 Apache 顶级项目!
  5. 阅读HashMap(1.6)源码所做的一些记录
  6. macOS | 提取BDrip(封装格式为mkv)中视频与音频并重新封装为mp4
  7. Unity2D愤怒的小鸟技术点总结 ---- 制作动画特效
  8. 社区中无法创建帖子chatter
  9. 校招-顺丰前端面经总结
  10. 图片查看器插件(带缩略图) - viewer.js
  11. 微信输入法 你有了吗?张小龙:防窃听、护隐私
  12. Android Studio挂载第三方模拟器
  13. Arista教你如何讨容器、白盒基础架构数据中心玩家的欢心
  14. OLTP、OLAP与HTAP
  15. 原创文章:使用Vuejs实现个人所得税功能,以及5000起点和3500起点之间的缴费变化兼容移动端
  16. 2022亚太杯A题思路
  17. 面试分析《疯狂Python讲义》PDF代码+《Python核心编程第3版》PDF代码问题
  18. Ubuntu16.04安装CH340驱动
  19. Chrome安装离线插件时出现CRX_Header_invalid
  20. 学习笔记之-51单片机特殊功能寄存器

热门文章

  1. 求android 中串口的发送接收数据代码
  2. Spring 事务 以及拦截器的前后关系实验 Mybatis 日志拦截
  3. python中文字符串转list
  4. MySQL基础入门学习【2】数据类型
  5. maven详解之坐标与依赖
  6. 《C++程序设计原理与实践》读书笔记(二)
  7. 做订购系统必须要明白的几点
  8. Foundationd和Application Kit的类层次
  9. 真是的= =还是对linux不太了解啊
  10. 剑指 Offer 53 - I. 在排序数组中查找数字 I(二分法)