美文网首页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

    1、动态创建对象的初始化 2、动态创建对象的默认初始化 可以利用下列方式进行默认初始化 3、撤销动态创建对象 C+...

  • new失败抛出异常吗?

    new/delete 在C++中动态分配与释放内存是通过new/delete和new []/delete []实现...

  • C++基础复习与总结

    一、new和malloc的区别1、new和delete配对,释放数组需要用delete[]。new和delete实...

  • C++内存

    认识C++内存 operator new, operator delete和new, delete operato...

  • new AND delete

    转载自 new和detele和sizeof类似,new 和 delete也不是函数,比如new和c中的malloc...

  • new delete

  • 成员函数、继承(20170213)

    C++06 区分new/delete malloc/free new /delete 运算符,不需要转换,自动...

  • c++ new 和delete的种种

    new/delete动态管理对象,new[]/delete[]动态管理对象数组。 C++中,把int 、char....

  • 2018-05-09

    new delete new delete与malloc free的区别 对于基本数据类型 malloc与free...

  • 面试准备

    C++面试总结 New、Delete和malloc、free的区别? New和Delete自动调用 构造函数 和 ...

网友评论

    本文标题:Cpp:new and delete

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