c++构造函数和析构函数反汇编


#include 

class 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创建的对象 都在堆上 

相关