- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
5.11new和delete表达式(P150)
1.动态创建对象的初始化
#include iostream
#include string
#include new
using namespace std;
int main()
{
int i(1024);
int *pi=new int(1024);
string s(10,9);
string *ps=new string(10,9);
coutiendl;
cout*piendl;
coutsendl;
cout*psendl;
delete pi;
delete ps;
return 0;
}
2.动态创建对象的默认初始化
区别:
1
string *ps=new string;//initialized to empty string
string *ps=new string();//initialized to empty string
2.
int *ps=new int;
//pi points to an uninitialized int
int *ps=new int();
//pi points to an int value-initialized to 0
cls *pc=new cls();
// pc points to a value-initialized object of type cls
#include iostream
#include string
#include new
using namespace std;
int main()
{
int *pi1=new int;
int *pi2=new int();
string *ps1=new string;
string *ps2=new string();
cout*pi1endl; //-842150451
cout*pi2endl; //-842150451 与书上不符合
cout*ps1endl; //empty
cout*ps2endl;// empty
delete pi1;
delete pi2;
delete ps1;
delete ps2;
return 0;
}
说明:()表示为动态对象初始化
3耗尽内存
后面6.13抛出异常
4.撤销动态创建的对象
如果分配空间不是new分配的,该指针使用delete是错误的
#include iostream
#include string
#include new
using namespace std;
int main()
{
int i;
int *p=i;
int *pi=new int(1024);
string *ps=new string(10,9);
coutiendl;
cout*piendl;
cout*psendl;
delete p; //error
delete pi;
delete ps;
return 0;
}
5零值指针的删除
如果指针为0,删除时合法的。
int *ip=0
delete ip;
#include iostream
#include string
#include new
using namespace std;
int main()
{
int *p=0;
coutpendl;
delete p;
return 0;
}
6.在delete之后,重设p的值
p被delete后,位置为0;不指向任何对象
#include iostream
#include new
using namespace std;
int main()
{
int *p=new int();
coutpendl;
delete p;
coutpendl;
return 0;
}
7.const对象的动态分配和回收
const int *pc=new const int(1024);
8.删除const对象
delete pc;
//下面程序有问题
#include iostream
#include new
using namespace std;
int main()
{
const int *p= new const int(1024);
coutpendl;
delete p;
return 0;
}
18.1优化内存分配(P632)
18.1.1 C++中的内存分配
文档评论(0)