2016 - 2024

感恩一路有你

怎么在类中创建构造函数 什么情况下用构造函数法?

浏览量:3977 时间:2023-07-03 23:44:20 作者:采采

什么情况下用构造函数法?

有两种情况,假设类名是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,测试

delete 函数 new 机制

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。