不大清楚你的意思。你是要把this传送给其它的class,还是。。

解决方案 »

  1.   

    什么意思?gcc的作者其实就是这样处理C++的
    如果A是一个类,int f(int a)是A的一个函数。那么大概就是这个样子
    int A::f(int a)int _f(A* this, int a)
      

  2.   

    哦,不好意思,我说得不清楚。
    我的意思是,this指针的传递路径是如何的?他会在什么时候终止传递?
    就是,如果某一个对象调用了一个成员函数f,然后编译器会给传递一个this指针,但是,如果在这个函数f里面又有很多函数调用(这些函数又调用函数,函数层层调用),编译器给每个被调用的成员函数都传入一个this指针,在内层函数中的this指针回改变吗?他会是什么样的值?
      

  3.   

    经过我的观察C++通常是用ECX来传递this的,总之不是通过椎栈
      

  4.   

    当成员函数调完之后this指针不再有效CMyClass::MyFunc()
    {
    ............}//成员函数返回后this不再有效
      

  5.   

    调用成员函数,需要一个this指针,他是隐含参数,将当你明白隐含参数的意思了,这个指针是对象实例的数据块的开始位置的指针,这个指针用来给成员函数访问数据变量用的,实例的首地址就是this指针,自然没有实例就没有this指针了。
    FlyingSch(FlyingSch)说是通过ECX传递的,可能是吧,我没有验证过。不过是肯定可以这样的,fastcall好多参数是通过寄存器传递。
      

  6.   

    绝对是通过ECX (无论是不是fastcall)
      

  7.   

    {
    CString strString;
    strString.GetLength();
    }------------
    push ebp
    mov ebp,esp
    sub ebp,8 //为strString分配内存,假如strString占用的内存为8B
    mov ecx,ebp //获得strString的this指针
    call 1078ab07 //假如 CString::GetLength()的DLL地址为1078ab07
    pop ebp
    ---------------1078ab07:  //CString::GetLength()
    push ebp
    ........
    mov ebx,ecx //用this指针
    .....
    pop ebp
    ret //返回后this指针不再有效//大体上是这样的,猜的~~
      

  8.   

    下个月结贴!
    大家多多发表高论!
    FlyingSch(FlyingSch) 举的例子不错!
      

  9.   

    this 这么难?
    我可没弄明白。
    那运算付重载 不是少了个参数?
    this 不就进去了?
    我说得连自己都糊涂了
    重载=  会给一个参数,
    另一个又this给引入.不明白,我说得自己都不了解了。
      

  10.   

    举个例子:
    CMyclass
    {
    int d;
    void Show(int i);
    };
    main()
    {
    CMyclass aa;
    aa.Show(1);//编译以后就相当于CMyclass::Show(1,&aa),差不多是这样吧
    }
    void CMyclass::Show(int i)
    {
    printf("%d",i+d);
    }
    //编译后
    void CMyclass::Show(int i,CMyclass* this)
    {
    printf("%d",i+this::d);
    }