美文网首页
c++中的this指针的获取

c++中的this指针的获取

作者: help_youself | 来源:发表于2019-05-28 15:53 被阅读0次

 通过这个例子,理解网上的一句话,this并不是一个类,只是一个关键字。那么类中的函数是怎么样获取到this代表的类的地址呢?这个网上有说,一个实例在调用类中函数时,会将此实例的地址存进ecx寄存器中。
 测试代码

#include <iostream>

using namespace std;

class Base {
public:
    virtual void f() {
        register int ecx asm("ecx");
        printf("ecx %x\n",ecx);
        printf("addr %x\n",this);
        cout<<"base::f"<<endl;
        }
    virtual void g() {cout<<"base::g"<<endl;}
    virtual void h() {cout<<"base::h"<<endl;}
};

class Derive : public Base{
public:
    void g() {cout<<"derive::g"<<endl;}
};
int main() {

    typedef void(*Func)(void);
    Base *d = new Derive();
    d->f();
    printf("base %x\n",d);
    long* pvptr = (long*)d;
    long* vptr = (long*)*pvptr;
    Func f = (Func)vptr[0];
    Func g = (Func)vptr[1];
    Func h = (Func)vptr[2];
    register int ecx asm("ecx");
    printf("test ecx %x\n",ecx);
    f();
    g();
    h();

    return 0;
}

f();这个调用,就会使得f中打印出的地址是个莫名其妙的值。
 下面的当时获取寄存器ecx的值也可以。

class Test{
public:
    void Print(){
     int b=0;
     asm ( "movl %%ecx, %0;\n"
          : "=r" (b));
     printf("%x,%x\n",this,b);
    }
private:

};

[1] 深入分析C++虚函数表
[2] 最牛X的GCC 内联汇编https://www.linuxprobe.com/gcc-how-to.html "
[3] C调用汇编 https://chuanwang66.iteye.com/blog/1837556

相关文章

  • c++中的this指针的获取

     通过这个例子,理解网上的一句话,this并不是一个类,只是一个关键字。那么类中的函数是怎么样获取到this代表的...

  • 闲聊c/c++: 再谈内存(c/c++,java,c#,js,o

    本篇目的: c/c++中如何判断大小端的函数 c/c++中通过指针法,移位法获取多字节数据类型中的各个字节 jav...

  • c++获取数组的指针

    // pointer_to_Byte_array.cpp // compile with: /clr using ...

  • C++: 引用(reference)

    介绍 在C语言中,使用指针(Pointer)可以间接获取、修改某个变量的值;在C++中,使用引用(Referenc...

  • [C++之旅] 16 对象指针/对象成员指针/this指针

    [C++之旅] 16 对象指针/对象成员指针/this指针 一、对象指针 对象指针指向堆中地址 对象指针指向栈中地...

  • 指针和引用的区别

    参照lyd_253261362的专栏的文章详细介绍=====c++中的引用与指针的区别 c++中的引用与指针的区别...

  • C++基础

    C++ 值传递、指针传递、引用传递详解C++中引用传递与指针传递区别 引用传递和指针传递的区别 引用的规则:(1)...

  • java中的引用与c++中的指针的区别

    java中的引用与c++中的指针的区别 Java的引用和C++的指针都是指向一块内存地址的,通过引用或指针来完成对...

  • C++中的this指针

    参考博客 简单说明一下this指针到底是什么 class是用户自定义的类型,我们都知道int *p是指向int类型...

  • C++中的this指针

    1.this指针的作用是什么?this 指针是一个隐含于每一个非静态成员函数中的特殊指针。它指向正在被该成员函数操...

网友评论

      本文标题:c++中的this指针的获取

      本文链接:https://www.haomeiwen.com/subject/dxudtctx.html