怎么在类中创建构造函数 什么情况下用构造函数法?
什么情况下用构造函数法?
有两种情况,假设类名是CTest,构造函数是默认构造函数。一个是创建本地对象时,CTest c;//此时会自动调用构造函数。一个是在堆上用new运算符分配对象时,CTest * pnew CT
C new和delete是如何调用构造函数和析构函数的?
在C中,你可能经常使用new和delete来动态申请和释放内存,但是你有没有想过下面这些问题?
是新增和删除功能。
新增[]和删除[]是什么?你什么时候使用它们?
你知道运算符new和运算符delete吗?
为什么new []中的数组有时会被delete释放,有时不会?
…
如果你对这些问题有什么疑问,不妨看看我的文章。
新增和删除的到底是什么?
找工作的同学如果看一些面试的书,相信都会遇到这样的问题:sizeof不是函数,然后给出一堆理由证明sizeof不是函数。这里和sizeof一样,new和delete不是函数,是C定义的关键字,可以通过特定的语法形成表达式。与sizeof不同的是,sizeof可以在编译时确定其返回值,new和delete背后的机制更加复杂。
在你继续下去之前,请想一想你认为new应该做什么。可能你的第一反应是new就像C语言中的malloc函数一样,是用来动态申请空间的。你答对了一半。请看下面的陈述:
string *ps新字符串(hello world)
可以看到new和malloc还是有点区别的。malloc在申请空间后不会初始化内存,但是new可以。所以new expression背后你要做的事情并没有你想的那么简单。在我用例子解释new背后的机制之前,您需要知道什么是操作符new和操作符delete。
操作员新建和操作员删除
这两个其实是C语言标准库的库函数,它们的原型如下:
void * operator new(size _ t)//分配一个对象
void *运算符delete(void *)//释放一个对象电休克疗法
void * operator new[](size _ t)//分配一个数组
void *运算符delete[](void *)//释放数组
可以跳过后两个,以后再介绍。前两个是C标准库函数。你认为这些是功能吗?请不要。;t怀疑,这就是函数!在C Primer这本书里说这不是new和delete的重载表达式(比如operator是重载运算符),因为new和delete的重载是不允许的。但是我没有。;我不明白为什么我应该使用操作符new和操作符delete,这很令人费解。我们只需要知道它们的意思。这两个函数有点像C语言中的malloc和free函数,都是用来申请和释放内存的,而运算符new在申请内存后并不初始化内存,而是直接返回申请内存的指针。
我们可以在程序中直接使用这些函数。
新建和删除背后的机制
知道了以上两个函数,我们用一个例子来解释new和delete背后的机制:
我们不。;t使用简单的C内置类型作为示例,但是使用更复杂的类类型来定义类A:
{
public:
:风险值
{
fopen_s(ampfile,测试
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。