C++ Primer 有感(new和delete表达式)

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


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

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

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

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

int *pi = new int;  //pi points to an uninitialized int
 int *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/hehehaha/p/6332732.html