zoukankan      html  css  js  c++  java
  • 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.删除指针后,该指针变成悬垂指针。悬垂指针指向曾经存放对象的内存,但该对象已经不再存在了。悬垂指针往往导致程序错误,而且很难检测出来。

  • 相关阅读:
    PHP线程安全和非线程安全有什么区别
    SHOW SLAVE STATUS 详解
    linux 2>&1
    crontab 例行性排程
    clang-format 数组初始化,多行模式
    windows 10 1909 无法启用 .NET Framework 解决
    SysCtlDelay 实现延时
    wpa_supplicant 检测错误密码
    swig python dynamic module does not define init function
    讯飞错误码10116
  • 原文地址:https://www.cnblogs.com/wangfengju/p/6173020.html
Copyright © 2011-2022 走看看