c++构造函数和析构函数反汇编
#includeclass MyClass { public: MyClass(); ~MyClass(); int m; char n; int getn(MyClass test) { return test.m + test.n; } int getm() { return m; } private: }; MyClass::MyClass() { m = 10; n = 9; } MyClass::~MyClass() { } int main() { MyClass * test=new MyClass; test->m = 10; test->n = 9; }
测试用例
je 判断是不是等于0 相当于在判断 创建的类对象是不是成功 等于失败 就在堆内申请内存 失败直接结束类创建
跳过执行构造函数的call
00F71A9A mov dword ptr [ebp+FFFFFF0Ch],0 在je 失败直接对 栈里 指针赋0了
浅拷贝和深拷贝问题记录在之前文章
对于构造函数的出现 可以猜测自己或者父类 有虚函数存在
先判断是否为0 如果是0就不用清空了 如果是回去找 析构函数的表 去调用 new创建的对象 都在堆上