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/wangfengju/p/6173020.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

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

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/93547

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月10日 上午2:13
下一篇 2023年2月10日 上午2:13

相关推荐