重识C++
码农
C,cocos2d-x,ogre,手游,网络游戏
展开
-
虚析构函数的作用
析构函数对于C++程序员来说应该都是很熟悉的。但是当有人问起我虚析构函数的作用的时候我茫然了,突然才发现虽然C++用了这么长时间,原来自己的底子是如此的不扎实。故此开辟出新的一个专栏决定重新认识一下C++。今天就从这个简单问题入手——虚析构函数的作用。一般来说我们在析构函数里做的最多的事情就是释放指针,内存回收等工作。那么问题来了。当我们用到类的继承的时候我们一般都会把析构函数作成虚析构。原创 2008-05-06 11:28:00 · 2577 阅读 · 4 评论 -
拷进去,拷出来——拷贝对象是STL的方式
当你向STL容器中添加一个对象的时候,进入容器的是你指定对象的拷贝;同样,当你从容器获取一个对象时,你所得到的对象不是容器里面的那个对象,而是那个对象的拷贝。一旦一个对象进入一个容器,以后对它的拷贝就多了。比如你从vector、string或deque中插入或删除元素,现有容器的元素就会移动(拷贝);如果使用了排序算法对象也会移动(拷贝)。因为这些拷贝的存在,问题也就出来了:原创 2008-11-23 17:59:00 · 788 阅读 · 0 评论 -
ifstream与ofstream
在程序设计中,数据输入/输出(I/O)操作是必不可少的,C++语言的数据输入/输出操作是通过I/O流库来实现的。C++中把数据之间的传输操作称为流,流既可以表示数据从内存传送到某个载体或设备中,即输出流,也可以表示数据从某个载体或设备传送到内存缓冲区变量中,即输入流。在进行I/O操作时,首先是打开操作,使流和文件发生联系,建立联系后的文件才允许数据流入和流出,输入或输出结束后,使用关闭操作使文件与原创 2008-05-22 20:43:00 · 7919 阅读 · 6 评论 -
虚函数表(vtbl)和虚表指针(vptr)
上一篇文还留了个问题没解决呢:就是关于那个虚函数指针的问题。其实这样称呼这个指针是不正确的,他确切的应该称为“虚表指针”。不废话了直接进入正题吧。当类中有虚函数的时候,编译器会为类插入一个我们看不见的数据并建立一个表。这个表就是虚函数表(vtbl),那个我们看不见的数据就是指向虚函数表的指针——虚表指针(vptr)。虚函数表就是为了保存类中的虚函数的地址。我们可以把虚函数表理解成一个数组,数组原创 2008-05-08 15:42:00 · 9771 阅读 · 1 评论 -
C++类的大小——sizeof()
先看这么个问题——已知:class CBase{ int a; char *p;};那么运行cout这个应该很简单,两个成员变量所占的大小有嘛——8。可由时候人就是爱犯这个错误:这么简单的问题人家会问你?再想想……好像C++类里面有个什么函数指针,也应该占字节吧!?什么指针来着?忘了(还是水平低不扎实)!流汗中……算了姑且认为是构造函数和析构函数吧。一人一个加上刚原创 2008-05-08 14:54:00 · 14345 阅读 · 7 评论 -
std::string实现全部替换功能
想把"/n"换成"//n"怎么办?因为std::string并未实现替换所有子串功能,故封装一个函数void StringReplace(string &strBase, string strSrc, string strDes){ string::size_type pos = 0; string::size_type srcLen = strSrc.size(); string原创 2008-07-15 16:36:00 · 19998 阅读 · 0 评论 -
关键字:mutable
学了这么长时间的C++了,还是第一次知道还有这么个关键字,真是惭愧之极。一个类的成员函数如果声明为const,比如int CXX::getValue() const;那么这个函数里面是不可以改变成员变量的值,并且这个函数里面也只能调用声明为const的其他成员函数。如果在这种情况下你想改变某一个成员变量的值,那么就要把这个成员变量声明为mutable。C++真是博大精深啊原创 2008-05-06 22:17:00 · 630 阅读 · 0 评论 -
C++堆栈概念
堆和栈的区别一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)转载 2008-05-06 13:02:00 · 1421 阅读 · 2 评论 -
STL 基础
STL 主要是由 containers(容器),iterators(迭代器)和 algorithms(算法)的 templates(模板)构成的。容器和算法通过迭代器进行无缝相连。1、容器种类: 1)向量(vector)可以用常数时间访问和修改任意元素,在序列尾部进行插入和删除时,具有常数时间复杂度,对任意项的插入和删除就有的时间复杂度与到末尾的距离成正比,尤其对向量头的添加原创 2008-05-06 21:45:00 · 647 阅读 · 0 评论 -
关于析构函数
声明:本文内容来源于网络。对原文稍加整理。主要对析构函数的知识以提问的方式进行叙述。Q1:析构函数是干什么的?A1:析构函数用来释放对象所分配的资源。举例来说,Lock 类可能锁定了一个信号量,那么析构函数将释放该信号量。最常见的例子是,当构造函数中使用了new,那么析构函数则使用delete。Q2:对象的析构顺序?A2:与构造函数相反,先构造的后析构。如:一个对象数组构造顺序是0原创 2008-05-07 11:11:00 · 806 阅读 · 0 评论 -
前置声明和Include以及预编译头
今天研究了一下前置声明和预编译头的东西,归纳几点东西使用原则:尽量在cpp文件里包含头文件1、头文件中能用前置声明的不要用Include,尽量在cpp中包含头文件。大型工程最好做个Prerequisites.h,把所有类型前置声明在一起,防止头文件的重复包涵。2、预编译头文件放那些大多数cpp都会包含的而且不是经常改动的头文件。前置声明 && include原创 2011-12-20 15:18:35 · 1189 阅读 · 0 评论