C++如何使用new来初始化指向类的指针.docxVIP

C++如何使用new来初始化指向类的指针.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

C++如何使用new来初始化指向类的指针

目录C++使用new来初始化类的指针C++指针初始化问题c++指针初始化的一般方法自己遇见的问题总结

C++使用new来初始化类的指针

1.ClassName*p=newClassName;

调用默认构造函数。

如果类里没有写默认构造函数,会使用编译器帮我们生成的,但不会初始化成员变量,如

classNoConstructor??//没写构造函数的类

public:

???~NoConstructor(){}

???voidprintVal()?

???{?

??????coutm_valendl;?

???}

private:

???intm_val;

NoConstructor*p1=newNoConstructor;

p1-printVal();`

打印出来的值是-842150451,也就是未初始化。

2.ClassName*p=newClassName();

调用默认构造函数。

如果类里没有写默认构造函数,会使用编译器帮我们生成的,并且会初始化成员变量,比如int类会被初始化为0

NoConstructor*p2=newNoConstructor();

p2-printVal();`

此时打印出来值是0

3.ClassName*p=newClassName(arg);

调用自定义构造函数,或含参数的默认构造函数(如果这两种函数都定义了,它们的arg类型必须不同,这是函数重载的要求)。

4.补充

关于几个概念:默认构造函数是指无参的构造函数,或有参数(即形参)、并且为所有形参指定了实参的构造函数。

非默认构造函数称为自定义构造函数。

如果在一个类里,两种默认构造函数都写了,那么newClassName和newClassName()都不可用。因为编译器无法确定要使用哪一个构造函数。

C++指针初始化问题

c++中的指针是一个很经典的用法,但是也是最容易出错的,比如定义了一个指针,必须对其进行初始化,不然这个指针指向的是一个未知的内存地址,后续对其操作的时候,会报错。

这只是其次,最让人头疼的就是指针错误问题,往往编译的时候可以通过,在程序运行的时候,就会出现异常,如果对程序不是很熟悉,则不是很容易找到问题所在,我最近就遇到过很多这样的问题,定义了一个结构体指针,使用的时候忘记初始化,导致在后边使用的时候程序报异常。

下面就总结一下c++指针初始化的一些方法,以及我自己遇到的一些问题以及心得体会。

c++指针初始化的一般方法

1.将一个已经在内存中存在变量的地址传递给定义的指针

这个指针就指向这个变量的内存地址(相同的数据类型),完成初始化。

比如:

inta=2;

int*b=

2.利用new开辟一块地址空间

structtest{

????inta;

????intb;

voidmain()

??intc=0;

??test*t=newtest();

??c=t-

}

使用new开辟的空间,记得使用delete释放,因为new出来的是返回的堆的空间,堆的空间是不会自动释放的,存放变量的栈才会自动释放。

delete释放其实只是释放了申请的这块内存空间,但是指针并没有没撤销,指针还是指向这块地址,但是不可用(靠人品吃饭的有可能可以用),是非法的。所以用delete释放掉一块堆内存时,应该自己手动将指针设置为NULL。

3.把指针设置为NULL或者0

这样做一般只是为了没有具体初始化的时候做的,这样避免了野指针,后面可以使用if(指针==NULL)来判断,然后再进行操作。

自己遇见的问题

我在使用结构体指针的时候,忘记将结构体指针初始化,导致后面访问结构体成员变量的时候出现错误(那种编译没错,执行出错的问题),后来将指针使用new初始化解决,还有一点就是,全局的变量名称与局部变量名称不要一样。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

文档评论(0)

158****7369 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档