首先定义一个类X

class X
{
public:
X();
X(const X& x); virtual ~X(); virtual foo();
}

再来一段代码:

X foobar()
{
X xx;
X *px = new X; //foo 是一个虚函数
xx.foo();
px->foo(); delete px;
return xx;
};

以上这个函数中包括了虚函数调用,构造,NRV优化,虚析构等部分。以下代码展示了用C代码描述样子:

//为了避免多次复制,直接将接收返回值的对象作为引用参数传入

void foobar(X &_result)
{
//X xx
//构造 _result
//调用传入对象的构造函数
//_result.X:X()可以理解为调用_result对象的X类中的X函数
_result.X:X(); //X *px = new X;
//这里的_new相当于malloc 是一个单纯的内存分配函数
//然后再对px指向的对象调用默认构造函数
px = _new(sizeof(X))
if(px != )
px->X::X() //xx.foo()
//虽然foo是个虚函数,但是xx.foo是直接通过对象调用的,不需要经过虚函转换,所以类似一般的函数调用,吧对象作为第一个参数直接传入
foo(&_result) //px->foo()
//使用虚函数表进行调用
(*px->vbtl[])(px) //delete px
//_delete相当于free
if(px) {
(*px->vbtl[])(px);
_delete(px); //由于做了NRV,所以不需要进行额外的创建匿名对象
return;
}

Inside The C++ Object Model - 04 C++对象模型的一个简单示例的更多相关文章

  1. 《深度探索C++对象模型(Inside The C++ Object Model )》学习笔记

    转载:http://dsqiu.iteye.com/blog/1669614 第一章 关于对象 使用class封装之后的布局成本: class并没有增加成本,data members直接内含在每一个c ...

  2. BOM (Browser Object Model) 浏览器对象模型

    l对象的角色,因此所有在全局作用域中声明的变量/函数都会变成window对象的属性和方法; // PS:尝试访问未声明的变量会抛出错误,但是通过查询window对象,可以知道某个可能未声明的对象是否存 ...

  3. JS--dom对象:document object model文档对象模型

    dom对象:document object model文档对象模型 文档:超文本标记文档 html xml 对象:提供了属性和方法 模型:使用属性和方法操作超文本标记性文档 可以使用js里面的DOM提 ...

  4. C++学习书籍推荐《Inside the C++ Object Model》下载

    百度云及其他网盘下载地址:点我 作者简介 Stanley B. Lippman is Architect with the Visual C++ development team at Microso ...

  5. javascript之DOM(Document Object Model) 文档对象模型

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  6. Inside The C++ Object Model(二)

    ============================================================================2-0. 关键字explicit被引入C++,提 ...

  7. inside the C++ Object model总结

    一. 关于对象 1.内联函数:能够除去函数调用的开支,每一处内联函数的调用都是代码的复制.这是一种空间换取时间的做法,若函数代码量大或者有循环的情况下,不宜内联(这件事有些编译器会自动帮你做).在类中 ...

  8. Inside The C++ Object Model - 03

    object Lessons 1.C++中布局以及存取时间上的的额外负担是由virtual引起的:virtual function.virtual base class.或是由于多继承引起的. 2.C ...

  9. Inside The C++ Object Model(三)

    ============================================================================3-0. 类所占的内存大小受到三个因素的影响:( ...

随机推荐

  1. nl2br() 函数

    nl2br() 函数在字符串中的每个新行 (\n) 之前插入 HTML 换行符 (<br />).经常用于在线编辑的内容,以便显示. 用法:nl2br(string) 参数 描述 stri ...

  2. JavaScript中__proto__与prototype的关系

    一.所有构造器/函数的__proto__都指向Function.prototype,它是一个空函数(Empty function) 1 2 3 4 5 6 7 8 9 Number.__proto__ ...

  3. Win10/UWP新特性系列—电池报告

    UWP中,新增了当节电模式开启时,App能获取到通知的API,通过响应电源条件的更改,比如咨询用户是否使用黑色背景等来帮助延长电池使用时间. 通过Windows.Devices.Power命名空间中的 ...

  4. Android 学习第3课,小例子

    package temperature.convert; import java.util.Scanner; public class Converter { public static void m ...

  5. Largest Number

    Given a list of non negative integers, arrange them such that they form the largest number. For exam ...

  6. mm/vmalloc.c

    /* *  linux/mm/vmalloc.c * *  Copyright (C) 1993  Linus Torvalds */ #include <asm/system.h>#in ...

  7. 如何书写高质量的jQuery代码(转)

    想必大家对于jQuery这个最流行的javascript类库都不陌 生,而且只要是前端开发人员肯定或多或少的使用或者接触过,在今天的这篇文章中,参考了一些资料及实际使用效率,将介绍一些书写高质量jQu ...

  8. linux 中printf的使用

    linux 中printf的使用printf "helloworld\n"printf 中换行必须加上\n printf '%d %s\n' 1 "abc" c ...

  9. js 实现ActiveXObject("Scripting.Dictionary") 功能

    /* 字典 ActiveXObject("Scripting.Dictionary") 项目中用到的ActiveXObject("Scripting.Dictionary ...

  10. iPhone SlideShow

    If you found any question when you use the Slideshow, don't hesitate to leave a message please.