Inside The C++ Object Model - 04 C++对象模型的一个简单示例
2024-09-22 11:49:35
首先定义一个类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;
}
最新文章
- SVG颜色、渐变和填充
- java并发编程(十七)内存操作总结
- FusionCharts简单教程(四)-----基本数字格式
- Jcrop+uploadify+php实现上传头像预览裁剪
- android:layout_gravity 和 android:gravity 的区别
- Atitit 三论”(系统论、控制论、信息论
- <;%@page include%>;、<;%@include%>;、<;jsp:include>;三者之间的本质区别
- CodeForces 489D Unbearable Controversy of Being (搜索)
- 在Struts2中使用poi进行excel操作下载的时候报getOutputStream() has already been called for this response 错误 [转]
- java的url 中国的争论导致了扭曲
- 分割url
- 报错:严重: Servlet.service() for servlet [springmvc] in context with path [ ] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause
- Serv-U 配置说明(虚拟路径、网络驱动器、个人文件夹,数据库管理)
- CentOS6.5安装RHive
- ling join 报错The specified LINQ expression contains references to queries that are associated with different cont
- e-olymp Problem9 N-digit numbers(打表)
- python multiprocessing 和tcp
- sed和awk学习整理
- AngularJS报错:[$injector:unpr] Unknown provider: $templateRequestProvider
- Runtime Errors:CALL_FUNCTION_REMOTE_ERROR/CALL_FUNCTION_NOT_REMOTE
热门文章
- IOS 使用FMDB多线程访问数据库 及databaseislocked的问题
- SendInput模拟Win(VK_LWIN)键的问题
- WPF的Binding学习笔记(二)
- java 后台校验格式
- 68. 蓄水池抽样(Reservoir Sampling)
- CentOS 基本设置
- VS 2013 打包程序教程
- 新冲刺Sprint3(第一天)
- LeetCode 【21. Merge Two Sorted Lists】
- [原创]cocos2d-x研习录-第二阶 概念类之精灵类(CCSprite)