用汇编的眼光?/p>
C++
(之
class
构造、析构)
?/p>
声明:版权所有,欢迎转载,请勿用于商业用途?/p>
联系信箱?/p>
feixiaoxing @163.com
?/p>
前面我们讨论基本上都?/p>
C
语言的内容,还没有真正触及到
C++
的相关知识。从这篇博客之后,我们将会更
多触及类的内容。类的属性很多,今天我们讨论主要就是构造函数、析构函数?/p>
?/p>
1
)如果没有构造函数、析构函数呢?/p>
[cpp]
view plaincopyprint?
1.
class apple
2.
{
3.
public:
4.
void print() const {return;}
5.
};
虽然这个类没有什么意义,但是如果?/p>
sizeof
计算一下大小的话,我们发现它还是占了一个字节。那么如?/p>
有一?/p>
apple
的变量呢?为了让
apple
的变量有意义,我们尝试做一个改变:
[cpp]
view plaincopyprint?
1.
66: apple a;
2.
67: a.print();
3.
00401248 lea ecx,[ebp-4]
4.
0040124B call @ILT+0(apple::print) (00401005)
5.
68: return;
6.
69: }
我们看到,堆栈分配了四个字节空间?/p>
a
,就?/p>
ebp
下面的一个字节?/p>
?/p>
2
?/p>
析构函数什么时候调用?
[cpp]
view plaincopyprint?
1.
class apple
2.
{
3.
public:
4.
apple() {printf("apple()!\n");}
5.
~apple() {printf("~apple()!\n");}
6.
void print() const {return;}
7.
};
如果调用呢,我们可以做一个测试环境,如下所示:
[cpp]
view plaincopyprint?
1.
68: apple a;
2.
0040126D lea ecx,[ebp-10h]