-
-
[原创]从反汇编的角度学C/C++之构造函数与析构函数
-
发表于:
2021-10-2 09:43
8246
-
[原创]从反汇编的角度学C/C++之构造函数与析构函数
构造函数可以让我们定义如何对类变量进行初始化,那么它们具体是如何工作的,不同的构造函数是否有不同的区别。以下实例定义了两者构造函数来初始化我们的类成员。
在main函数中的反汇编代码如下:
可以看到不同的构造函数在内存中的表现差别也只是参数的不同,所以定义多个构造函数和我们的函数重载是一样的,都是由编译器为我们生成了相应的代码供我们调用。那么函数内部的实现是如何。我们来分别看看0x0891060和0x0891000地址的内容
可以看到构造函数和我们平时写的普通函数并没什么不一样,只不过在函数返回的时候构造函数会将类变量的地址作为返回值返回给用户。
拷贝构造函数作为一种特殊的构造函数在编程中有着广泛的用途,将上面的实例增加一个拷贝构造函数如下
首先看看main函数中的反汇编
可以看到拷贝构造函数如预期一样把相应的类变量地址入栈后调用函数,接下来我们看看拷贝构造函数
当然还有一种比较常见的是在类初始化赋值的时候会调用拷贝构造函数如下
反汇编的内容跟上面传参调用是一样的,可见由拷贝构造函数的时候,初始化的时候编译器会帮我们自动调用拷贝构造函数。
在C/C++中,析构函数常常被用来释放内存空间,修改上述实例为如下
接着我将会在test函数中定义这个变量,依次来观察析构函数的使用
由上可以看出,对于局部变量来说,在函数退出之前会首先调用相应的析构函数释放内存,随后才开始函数退出代码的执行。再看析构函数内容
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2021-10-20 11:24
被1900编辑
,原因: