银狐狸迷情药水:用汇编的眼光看C++(之class构造、析构)
来源:百度文库 编辑:偶看新闻 时间:2024/04/29 03:13:56
前面我们讨论基本上都是C语言的内容,还没有真正触及到C++的相关知识。从这篇博客之后,我们将会更多触及类的内容。类的属性很多,今天我们讨论主要就是构造函数、析构函数。
(1)如果没有构造函数、析构函数呢?
view plaincopy to clipboardprint?
- class apple
- {
- public:
- void print() const {return;}
- };
虽然这个类没有什么意义,但是如果用sizeof计算一下大小的话,我们发现它还是占了一个字节。那么如果有一个apple的变量呢?为了让apple的变量有意义,我们尝试做一个改变:
view plaincopy to clipboardprint?
- 66: apple a;
- 67: a.print();
- 00401248 lea ecx,[ebp-4]
- 0040124B call @ILT+0(apple::print) (00401005)
- 68: return;
- 69: }
(2) 析构函数什么时候调用?
view plaincopy to clipboardprint?
- class apple
- {
- public:
- apple() {printf("apple()!\n");}
- ~apple() {printf("~apple()!\n");}
- void print() const {return;}
- };
view plaincopy to clipboardprint?
- 68: apple a;
- 0040126D lea ecx,[ebp-10h]
- 00401270 call @ILT+65(apple::apple) (00401046)
- 00401275 mov dword ptr [ebp-4],0
- 69: {
- 70: apple b;
- 0040127C lea ecx,[b]
- 0040127F call @ILT+65(apple::apple) (00401046)
- 71: }
- 00401284 lea ecx,[b]
- 00401287 call @ILT+0(apple::~apple) (00401005)
- 0040128C mov dword ptr [ebp-4],0FFFFFFFFh
- 72: }
- 00401293 lea ecx,[ebp-10h]
- 00401296 call @ILT+0(apple::~apple) (00401005)
- 0040129B mov ecx,dword ptr [ebp-0Ch]
- 0040129E mov dword ptr fs:[0],ecx
(3)如果是new调用类,析构函数会自动调用吗?
不会。
(4)构造函数、析构函数的本质?
我们知道在函数中的临时变量在堆栈里面应用的时候都需要初始化处理的,在堆栈返回的时候会被自动收回。那么构造函数和析构函数?其实是一样的,在函数调用的时候,堆栈也会为这样一个类准备大小合适的堆栈,然后调用构造函数对这样的一片内存进行初始化处理,在函数return的时候,调用另外一个函数对可能涉及到的资源进行一次清理。这里指的资源不是指内存空间,而是指广义意义上的系统资源、比如说IO、socket、锁、画笔、对话框句柄等等。所以,通常而言,如果你在析构函数里面没有及时对资源进行分配,那么就会造成资源的泄露。这一切只有等到程序结束的时候才会重新回到系统的手中,不过如果一个程序占有太多的资源,那么势必会对别的程序造成影响。
【待续】
你用怎么样的眼光看这个世界
汇编与C谁是高手用的?
用什么眼光看社会
有没有关于用生物眼光看生物界的文章
求用哲学的眼光看教育文章
用不同的眼光看他这句话换成成语
用发展的眼光看问题, 这个发展是什么意思
class格式用什么看
怎样避开别人看你的眼光
以高中生的眼光看八荣八耻
在大学学单片机都是用汇编编程的,在以后的工作中用C语言多还是汇编多?
反汇编翻译成英文翻译怎么说啊?Borland C有反汇编的功能吗?怎么用啊
什么叫用发展的眼光看问题? 这里的发展什么意思
求有关《用发展的眼光看问题》的议论范文
用文化的眼光看,奥林匹克运动为什么会从希腊走向世界?
谁有上海高一政治 用发展的眼光看问题 上课内容
汇编和c语言如何结合的?
如何评价《青春之歌》中的余永泽?用现代眼光。
请用辨证的眼光看这篇戏剧。
lzw压缩编码的实现,用c语言,vf,汇编均可??????
WINDOWS是用什么语言编的?C和汇编么?
请问用汇编或者C怎么写4×4键盘的密码输入功能
windows、C、VC、VB、Java、汇编、linux分别是用什么语言写的?
请用C++、汇编两种编程语言写出最高效的代码(急)