- 博客(8)
- 资源 (24)
- 收藏
- 关注
原创 深度探索c++对象模型之placement operator new语意
首先谈谈new、delete和operator new、operator delete的区别:new和delete只是c++中的运算符而已!而operator new和operator delete则是c++中的函数,是可以重载的函数,被重载时,第一个参数是是要求分配空间的大小(字节),类型一般是size_t,除此之外,还可以带其它的参数,但该函数的返回类型必须是void *;此外,它与new不同
2016-11-18 18:50:08 668
原创 深度探索c++对象模型之带有constructor类数组的new语义学
还记得我们以前谈过的“vec_new”吗,它只针对有constructor的类数组,像我们写【int *p = new int[5];】或【My_Simple_Class *pm = new My_Simple_Class[7]; //我们的My_Simple_Class没有定义声明constructor或destructor】,在编译器层面是没有使用vec_new的,因为它们只是单纯的开辟内存和
2016-11-13 20:19:29 968
原创 深度探索c++对象模型之new和delete运算符介绍
在c++中,无论是new还是delete,它们都被当成是运算符的,new运算符对应的是C语言中的malloc函数【在new的重载运算符函数里面调用malloc】,而delete自然对应的是C语言中的free函数了。当我们写下一句【int *p = new(7);】时,在编译转化后,最简单的版本也是这种: //编译过后 int *p = _new( sizeof(int) ); //第一步 *p
2016-11-09 20:31:16 605
原创 深度探索c++对象模型之类对象数组的黑盒
还是以前的Point类,如果我们用Point声明了一个数组,比如【Point p[10];】,在编译器层面会发生什么呢?这要分为两种情况,首先,如果我们在定义Point类时,既没有定义一个constructor,也没有定义一个destructor,那么建立Point类对象的数组和建立一个int类型的数组并没有什么本质区别,只要开辟出10个连续的内存能储存这些Point元素就可以了;但是,如果Poi
2016-11-07 17:55:20 545
原创 深度探索c++对象模型之类全局对象的初始化与析构
与C语言相比,c++复杂的地方与很多,其中之一就是对全局对象的初始化。在C语言中很简单,不管是内带类型还是自定义的结构体类型,如果声明为全局对象并且我们没有给它们一个显示的常量初始化的话,那么它们都会被0默认初始化。但在c++中这样显然不行,想象一下一个有着虚函数的类全局对象,我们该如何给其中的虚函数表指针初始化呢?所以,考虑一下这个代码段: Matrix identity; int main
2016-11-05 18:42:25 780
原创 深度探索c++对象模型之类对象的赋值
在C++中,当我们声明一个类时,如果没有给这个类操作符“=”定义一个函数,那么一般情况下编译器会自动为这个类合成一个默认的copy assignment operator【拷贝赋值操作符】,而这种copy assignment operator的工作模式是bitwise copy,所谓的bitwise copy,意思就是按位施以拷贝【两个类对象除了在内存中的位置不一样,其它的一模一样】。但这种模式
2016-11-04 17:48:54 767 1
原创 深度探索c++对象模型之vptr初始化语意学
上一篇中,我提到了关于一个派生类对象构造时,里面基类们的构造顺序,是从内到外、从根源到末端。所以对一个PVertex对象来说,它的构造顺序是:1、Point 2、Point3d 3、Vertex 4、Vertex3d 5、PVertex,然后书中说到【大意】:在以上的每一个类中,都定义两个虚函数,一个是fun【我自己取的名】,一个是size,其中它俩的关系是,在size中调用fun;然后
2016-11-03 20:38:35 785
原创 深度探索c++对象模型之虚继承的对象构造
郑重声明:以下文字“借鉴”自侯捷老师的译作《深度探索C++对象模型》部分内容,写在这里,算是加深自己对此书内容的记忆,因为鄙人水平太浅,难免有理解错误的地方,如果有朋友看出来,还请费神指出,鄙人不胜感激! 让我们先来看这样一个继承体系,首先声明一个Point类作为基类,然后再声明两个Point3d和Vertex,它们俩都虚拟继承自Point类,接着再申请一个Vertex3d类,它继承
2016-11-02 19:05:51 705
地表最强【安卓平台可以运行】.apk
2021-02-14
IEE二进制转换器
2015-12-30
象棋对弈程序的开发
2014-05-02
c++开发出的象棋对弈程序 有详细的制作纲领源码解释说明
2013-01-29
c++开发的简单象棋软件 有源码说明
2013-01-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人