Cpp:new and delete

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.


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 9,537评论 1 51
  • 1 文件结构 每个C++/C程序通常分为两个文件。一个文件用于保存程序的声明(declaration),称为头文件...
    Mr希灵阅读 2,886评论 0 13
  • 之前看了很多面试题,感觉要不是不够就是过于冗余,于是我将网上的一些面试题进行了删减和重排,现在分享给大家。(题...
    Job_Yang阅读 12,111评论 12 143
  • 你说带我去看风景,你不知道的是你剪影在我眼中。 春末之樱灿若烟火,燃点初夏序章。 贯穿学校的长河里的鱼悠哉游哉,不...
    素光阅读 175评论 0 0
  • var date = new Date(); formatTime(date); function formatT...
    hello_water阅读 209评论 0 0