首先定义一个类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;
}

最新文章

  1. SVG颜色、渐变和填充
  2. java并发编程(十七)内存操作总结
  3. FusionCharts简单教程(四)-----基本数字格式
  4. Jcrop+uploadify+php实现上传头像预览裁剪
  5. android:layout_gravity 和 android:gravity 的区别
  6. Atitit 三论”(系统论、控制论、信息论
  7. <%@page include%>、<%@include%>、<jsp:include>三者之间的本质区别
  8. CodeForces 489D Unbearable Controversy of Being (搜索)
  9. 在Struts2中使用poi进行excel操作下载的时候报getOutputStream() has already been called for this response 错误 [转]
  10. java的url 中国的争论导致了扭曲
  11. 分割url
  12. 报错:严重: Servlet.service() for servlet [springmvc] in context with path [ ] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause
  13. Serv-U 配置说明(虚拟路径、网络驱动器、个人文件夹,数据库管理)
  14. CentOS6.5安装RHive
  15. ling join 报错The specified LINQ expression contains references to queries that are associated with different cont
  16. e-olymp Problem9 N-digit numbers(打表)
  17. python multiprocessing 和tcp
  18. sed和awk学习整理
  19. AngularJS报错:[$injector:unpr] Unknown provider: $templateRequestProvider
  20. Runtime Errors:CALL_FUNCTION_REMOTE_ERROR/CALL_FUNCTION_NOT_REMOTE

热门文章

  1. IOS 使用FMDB多线程访问数据库 及databaseislocked的问题
  2. SendInput模拟Win(VK_LWIN)键的问题
  3. WPF的Binding学习笔记(二)
  4. java 后台校验格式
  5. 68. 蓄水池抽样(Reservoir Sampling)
  6. CentOS 基本设置
  7. VS 2013 打包程序教程
  8. 新冲刺Sprint3(第一天)
  9. LeetCode 【21. Merge Two Sorted Lists】
  10. [原创]cocos2d-x研习录-第二阶 概念类之精灵类(CCSprite)