美文网首页C++
Cpp:new and delete

Cpp:new and delete

作者: LuuilX | 来源:发表于2015-11-27 22:08 被阅读115次

    1、动态创建对象的初始化

    int i(1024);
    int *ip = new int (1024);    //*ip = 1024
    string s(10, '9');    //s = "9999999999"
    string *sp = new string(10, '9');    //*sp = "9999999999"
    

    2、动态创建对象的默认初始化

    string *sp = new string;    //空string
    int *ip = new int;    //未初始化
    

    可以利用下列方式进行默认初始化

    string *sp = new string();    //空string
    int *ip = new int();    //0
    

    3、撤销动态创建对象

    int i;
    int *ip = &i;
    string s("str");
    double *dp = new double(3.14);
    int *ip0 = 0;
    
    delete s;    //error: s是非动态对象
    delete ip;    //error: ip指向本地对象
    delete dp;    //ok
    delete ip0;    //ok: 但没什么意义
    

    C++未明确定义如何释放非new分配的内存地址。

    4、delete后重设指针的值

    执行delete语句后,尽管指针变成未定义,但仍存放了之前所指对象的地址,称为 悬挂指针(dangling pointer) 。这种指针往往容易出错。

    一旦delete指针,立即将其置为0,就可以避免悬挂指针。

    5、const对象的动态分配和回收

    const int *cip = new const int(1024);    //必须初始化,且不能再修改
    

    如果有默认构造函数,则可以隐式初始化,如

    const string *csp = new const string;
    

    尽管不能改变const对象的值,但可撤销对象本身

    delete cip;    //ok
    cip = 0;
    

    END.


    相关文章

      网友评论

        本文标题:Cpp:new and delete

        本文链接:https://www.haomeiwen.com/subject/dxidhttx.html