006 this指针原理

/*
目录:
   一 this指针原理
*/

一 this指针原理

class CTest
{
public:
    CTest(int nNum)
    {
        this->nNum = nNum;
    }
    ~CTest()
    {

    }
    void Print()
    {
        cout << nNum << endl;
    }
private:
    int nNum;
};

int main(int argc, char *argv[], char **envp)
{
    CTest c(0x11);
    c.Print();

    return 0;
}

// 反汇编
// 调用函数
int main(int argc, char *argv[], char **envp)
{
   136:     CTest c(0x11);
0041A8BD  push        11h
0041A8BF  lea         ecx,[c]                      // 获取地址 : ecx  - 变量c地址
0041A8C2  call        CTest::CTest (0411983h)
0041A8C7  mov         dword ptr [ebp-4],0
    return 0;
}

// 别调函数
   114: class CTest
   115: {
   116: public:
   117:     CTest(int nNum)
004122F0  push        ebp
004122F1  mov         ebp,esp
004122F3  sub         esp,0CCh
004122F9  push        ebx
004122FA  push        esi
004122FB  push        edi
004122FC  push        ecx                      // 压栈参数 : ecx - 变量c地址
004122FD  lea         edi,[ebp-0CCh]
00412303  mov         ecx,33h
00412308  mov         eax,0CCCCCCCCh
0041230D  rep stos    dword ptr es:[edi]
0041230F  pop         ecx                      // 出栈参数 : ecx - 变量c地址
00412310  mov         dword ptr [this],ecx  // 参数赋值 : ecx - 隐藏变量this指针; 此时this指针指向mian函数中变量c地址。
   118:     {
   119:         this->nNum = nNum;
00412313  mov         eax,dword ptr [this]
00412316  mov         ecx,dword ptr [nNum]
00412319  mov         dword ptr [eax],ecx
   120:     }
        }

原文地址:https://www.cnblogs.com/huafan/p/11619445.html

时间: 2024-11-10 15:14:15

006 this指针原理的相关文章

快慢指针原理--快速找到未知长度单链表的中间节点

package com.java.dataStruct; //节点类 public class Node<E> { E item; Node next; public Node(){ } public Node(E element){ this.item = element; } public Node(E element, Node next){ this.item = element; this.next = next; } } Node p1,r1; Node L1 = new Node

Objective-C中,ARC下的 strong和weak指针原理解释

Objective-C中,ARC下的 strong和weak指针原理解释 提示:本文中所说的"实例变量"即是"成员变量","局部变量"即是"本地变量" 一.简介 ARC是自iOS 5之后增加的新特性,完全消除了手动管理内存的烦琐,编译器会自动在适当的地方插入适当的retain.release.autorelease语句.你不再需要担心内存管理,因为编译器为你处理了一切 注意:ARC 是编译器特性,而不是 iOS 运行时特性(除

智能指针原理与简单实现(转)

以下实现没有考虑线程安全的问题. 智能指针:它的一种通用实现方法是采用引用计数的方法.智能指针将一个计数器与类指向的对象相关联,引用计数跟踪共有多少个类对象共享同一指针. 每次创建类的新对象时,初始化指针并将引用计数置为1: 当对象作为另一对象的副本而创建时,拷贝构造函数拷贝指针并增加与之相应的引用计数: 对一个对象进行赋值时,赋值操作符减少左操作数所指对象的引用计数(如果引用计数为减至0,则删除对象),并增加右操作数所指对象的引用计数:这是因此左侧的指针指向了右侧指针所指向的对象,因此右指针所

浅析C语言指针原理

浅谈C语言指针 学习指针,我们必须明白什么是指针.在大多数教材上给出的定义为:"一个变量的地址称为该变量的指针". 由此,首先我们来谈谈计算机内存地址.我们都知道运行一个C语言程序需要将程序从磁盘加载到内存中进行运算.而所谓的运算可以抽象理解为计算机处理器通过地址读取指令.数据的过程.在内存中,每个字节(8位)对应有一个地址,连续存储空间对应连续地址,处理器通过地址可得到存储空间存储的数值.为了方便理解,例举出我们计算机存取变量值的原理:当我们定义一个局部变量例如short a=7时,

智能指针原理与简单实现

当类中有指针成员时,一般有两种方式来管理指针成员:一是采用值型的方式管理,每个类对象都保留一份指针指向的对象的拷贝:另一种更优雅的方式是使用智能指针,从而实现指针指向的对象的共享. 智能指针(smart pointer)的一种通用实现技术是使用引用计数(reference count).智能指针类将一个计数器与类指向的对象相关联,引用计数跟踪该类有多少个对象共享同一指针.    每次创建类的新对象时,初始化指针并将引用计数置为1:当对象作为另一对象的副本而创建时,拷贝构造函数拷贝指针并增加与之相

C/C++知识要点5——智能指针原理及自己定义实现

智能指针概述: 智能指针用来管理动态对象.其行为类似于常规指针,重要的差别是:它负责自己主动释放所指向的对象. C++ 11标准库提供两种智能指针:shared_ptr.unique_ptr 差别是:shared_ptr同意多个指针指向同一个对象:unique_ptr则独占所指向的对象. 另外.另一种weak_ptr的伴随类,它是一种弱引用.指向shared_ptr所管理的对象. 自己定义智能指针实现方法: 实现方法使用引用计数方法. 智能指针将一个计数器与类指向的对象相关联,引用计数跟踪一共同

C/C++知识要点5——智能指针原理及自定义实现

智能指针概述: 智能指针用来管理动态对象.其行为类似于常规指针,重要的区别是:它负责自动释放所指向的对象. C++ 11标准库提供两种智能指针:shared_ptr.unique_ptr 区别是:shared_ptr允许多个指针指向同一个对象:unique_ptr则独占所指向的对象. 另外,还有一种weak_ptr的伴随类,它是一种弱引用,指向shared_ptr所管理的对象. 自定义智能指针实现方法: 实现方法使用引用计数方法. 智能指针将一个计数器与类指向的对象相关联,引用计数跟踪一共有多少

智能指针原理及实现(2)- unique_ptr

只允许基础指针的一个所有者. 可以移到新所有者(具有移动语义),但不会复制或共享(即我们无法得到指向同一个对象的两个unique_ptr). 替换已弃用的 auto_ptr. 相较于 boost::scoped_ptr. unique_ptr 小巧高效:大小等同于一个指针,支持 rvalue 引用,从而可实现快速插入和对 STL 集合的检索.在头文件<memory>中. unique_ptr 为了避免和库里面的名称混淆,我自己实现的时候用的UniquePtr加以区分. 同一时刻,只能有一个un

C指针原理(9)-C内嵌汇编

我们使用m标记可以直接在内存中对数进行操作,前面的例子对变量进行操作时都需要将变量值存储在要修改的寄存器中,然后将它写回内存位置中. #include <stdio.h> int main(void){ int xa=2; int xb=6; asm volatile( "subl %1,%0\n\t" :"=r"(xb):"m"(xa),"0"(xb)); printf("%d\n",xb);