C/C++
文章平均质量分 72
G机器猫
致力于软件技术研发.
展开
-
C++ - 强引用和弱引用
原来,我认为“为什么会有引用计数这样的技术”是为了内存自动回收和节省内存,但是读完下面的几节后,内存自动回收是一个原因,但是节省内存并不是真正的原因,真正的原因是有些对象如果被复制在现实中是不合事实的。为什么有引用计数 C++中存在两种语义:值语义(value sematics)和对象语义(object sematic),对象语义也可以叫做引用语义(reference sem转载 2013-03-27 22:19:34 · 8956 阅读 · 2 评论 -
C/C++ - 字节对齐
C++字节自然对齐C的字节对齐和C++基本相同,但是也有一些区别,在下面的分析中会有提及。示例#include class a{};class b{ char b;};class c{ char a; char b; char c; char d; char e;};class d{ short a; char b;};class e原创 2013-04-16 16:52:55 · 2624 阅读 · 0 评论 -
C/C++ - 小语法集锦
开头 "::" 的作用//开头就是两个冒号用于引用全局变量 int count = 0; //全局变量 int main(void) { int count = 0; //局部变量 ::count = 1; //设全局变量 count 为 1 count = 2; //设局部变量 count 为 2 return 0; } 指针和int之间的转换 int m原创 2013-01-07 10:05:24 · 559 阅读 · 0 评论 -
C++ - assert()函数
说明assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:#include void assert( int expression );assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。请看下面的程序清单badptr.c:转载 2013-04-25 15:46:44 · 1015 阅读 · 0 评论 -
C++ - static_cast | reinterpret_cast | dynamic_cast
reinterpret_cast可以转换任意一个32bit整数,包括所有的指针和整数。可以把任何整数转成指针,也可以把任何指针转成整数,以及把指针转化为任意类型的指针,威力最为强大!但不能将非32bit的实例转成指针。总之,只要是32bit的东东,怎么转都行! static_cast和dynamic_cast可以执行指针到指针的转换,或实例本身到实例本身的转换,但不能在实例和指针之间转换。st转载 2013-06-20 22:27:02 · 968 阅读 · 0 评论 -
心得 - 如何读大型代码和写代码
硬件工程师画PCBà代码黑盒子首先,我们分析一下硬件工程师是如何将一个芯片画在一个PCB上的。硬件工程师首先阅读芯片的datasheet,他阅读的一个重点是芯片每个管脚的作用,是输入还是输出。硬件工程师不一定非要明白该芯片是怎么实现的才能将芯片正确地画在PCB上;不一定非得知道每个管脚的时序图,才能将用好该芯片。在读大型代码时,我们正在研究的某个模块或者类可能会new太多的其他类对象或者调用很原创 2013-01-16 18:17:13 · 2457 阅读 · 0 评论 -
C++ - 对象模型之 编译器何时才会自行添加构造函数
C++对象模型目录C++ - 对象模型之 编译器何时才会自行添加构造函数C++ - 对象模型之 内存布局C++ - 对象模型之 成员函数调用C++ - 对象模型之 构造和析构函数都干了什么C++ - 对象模型之 类对象在执行时是如何生成的C++ - 对象模型之 模板、异常、RTTI的实现C++ - 对象模型之 编译器何时才会自原创 2013-02-24 02:09:27 · 1524 阅读 · 2 评论 -
boost - thread
线程基本创建方法第一种方式:最简单方法 #include #include void hello() { std::cout << "Hello world, I''m a thread!" << std::endl; } int main(int argc, char* argv[]) {原创 2013-05-02 13:06:58 · 1039 阅读 · 0 评论 -
std - string
关键点1. 赋值时,如string s1 = "abcd" 或 string s1 = s2,s1首先分配足够的内存,然后将字符串或者s2复制到刚分配的内存,所以之后字符串或者s2修改,都不会影响s1。2. string的长度不是int,而是string::size_type,string::size_type是一个unsigned类型,之所以不是标准类型,是因为标准类型和机器关系很大,如原创 2013-05-05 09:53:49 · 848 阅读 · 0 评论 -
boost - 智能指针介绍
智能指针的标准之争:Boost vs. Loki 2001 年10 月和2002 年4 月,在美国的华盛顿和荷兰的安的列斯群岛上分别召开了两次C++标准会议。会议的内容之一是对一项新的C++特性提议——智能指针(Smart Pointer)——进行讨论。本文将对可能成为C++新标准的两种智能指针方案(Boost vs. Loki)进行介绍和分析,并给出了相应的使用实例。转载 2013-03-08 18:19:38 · 1468 阅读 · 0 评论 -
STL - Map
Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有转载 2013-04-21 12:29:12 · 746 阅读 · 0 评论 -
STL - sort排序算法
sort模板有两种:---------------------------------------------------------------------template void sort(RanIt fist, RanIt last);template void sort(RanIt fist, RanIt last, Pred pr);--------转载 2013-01-25 17:57:30 · 857 阅读 · 0 评论 -
boost - 智能指针总结
shared_ptr常用接口use_count() : 获得引用计数数量。get() : 获得原始指针。reset() : 指向NULL内存。注意事项1. 不能直接赋值NULL,编译无法通过;如果需要清空使用reset();reset后,ptr指向NULL内存。2. 不能手动释放内存,如delete ptr.get(),这将会出现内存错误,至于为什么,目前还不清原创 2013-05-02 14:50:25 · 1138 阅读 · 0 评论 -
STL - priority_queue 优先级队列
基本用法STL之优先队列原本以为priority_queue很简单,才知道原来懂的只是最简单的形式。头文件:#include优先队列,也就是原来我们学过的堆,按照自己定义的优先级出队时。默认情况下底层是以Vector实现的heap。既然是队列,也就只有入队、出队、判空、大小的操作,并不具备查找功能。函数列表:empty() 如果优先队列为空,则返回真 pop转载 2013-01-14 16:33:38 · 1632 阅读 · 0 评论 -
C/C++ - 内存泄漏及检测
原文地址:http://www.cnblogs.com/skynet/archive/2011/02/20/1959162.html“该死系统存在内存泄漏问题”,项目中由于各方面因素,总是有人抱怨存在内存泄漏,系统长时间运行之后,可用内存越来越少,甚至导致了某些服务失败。内存泄漏是最难发现的常见错误之一,因为除非用完内存或调用malloc失败,否则都不会导致任何问题。实际上,使用C/C++这类转载 2013-03-01 10:03:15 · 895 阅读 · 0 评论 -
C++ - 引用和指针
1.1.1.1 摘录从概念上讲。指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变。而引用是一个别名,它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变的(自始至终只能依附于同一个变量)。在C++中,指针和引用经常用于转载 2013-01-27 16:30:17 · 491 阅读 · 0 评论 -
C++ - 对象模型之 模板、异常、RTTI的实现
C++对象模型目录C++ - 对象模型之 编译器何时才会自行添加构造函数C++ - 对象模型之 内存布局C++ - 对象模型之 成员函数调用C++ - 对象模型之 构造和析构函数都干了什么C++ - 对象模型之 类对象在执行时是如何生成的C++ - 对象模型之 模板、异常、RTTI的实现C++ - 对象模型之 模板、异常、原创 2013-03-04 20:26:33 · 1436 阅读 · 0 评论 -
C++ - Struct和Class的区别
转载来源:http://blog.sina.com.cn/s/blog_48f587a80100k630.htmlC++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能。struct能包含成员函数吗? 能!struct能继承吗? 能!!struct能实现多态吗? 能!!! 既然这些它都能实现,那它和class转载 2013-01-14 14:46:48 · 570 阅读 · 0 评论 -
C++ - const
C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助。Const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。 一、Const作用 如下表所示:No.作用说明参考代码转载 2012-12-17 10:39:00 · 558 阅读 · 0 评论 -
C - 内存布局
进程内存分布介绍一个由C/C++编译的程序除了存放函数二进制代码的程序代码段(code段)外,数据占用的内存大致分为以下几个部分:1、栈区(stack) 存放局部变量、函数参数、返回数据、返回地址等。系统自动分配释放 ,其操作方式类似于数据结构中的栈。需要注意的有三点: 第一, 退栈后销毁进栈时定义数据,请看下面这段。char* fun(char *p)转载 2013-02-04 16:27:36 · 1010 阅读 · 0 评论 -
C - 函数调用的栈分配
摘录一 当调用(call)一个函数时,主调函数将声明中的参数表以逆序压栈,然后将当前的代码执行指针(eip)压栈,跳转到被调函数的入口点。 进入被调函数时,函数将esp减去相应字节数获取局部变量存储空间。被调函数返回(ret)时,将esp加上相应字节数,归还栈空间,弹出主调函数压在栈中的代码执行指针(eip),跳回主调函数。再由主调函数恢复到调用前的栈。转载 2013-02-04 17:04:40 · 995 阅读 · 0 评论 -
C++ - __stdcall 与 __cdecl
摘录一_stdcall 是StandardCall的缩写,是C++的标准调用方式:所有参数从右到左依次入栈,如果是调用类成员的话,最后一个入栈的是this指针。这些堆栈中的参数由被调用的函数在返回后清除(也就是自己清除),函数在编译的时候就必须清楚参数个数。_cdecl 是CDeclaration的缩写,表示C语言默认的函数调用方法:所有参数从右到左依次入栈,这些参数由调用者清除。被调转载 2013-02-04 17:12:49 · 1032 阅读 · 0 评论 -
C++ - extern "C"
C++中extern “C”含义深层探索1.引言 C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持转载 2013-02-05 13:36:48 · 706 阅读 · 0 评论 -
C - main函数前的准备工作
囫囵C语言(三):谁调用了我的main 现在最重要的是要跟得上潮流,所以套用比较时髦的话,谁动了我的奶酪。谁调用了我的 main?不过作为计算机工作者,我劝大家还是不要赶时髦,今天Java热,明天 .net 流行,什么时髦就学什么。我的意思是先花几年把基本功学好,等你赶时髦的时候也好事半功倍。废话不多说了。 我们都听说过一句话:“main是C语言的入口”。我转载 2013-02-04 16:03:10 · 1835 阅读 · 0 评论 -
C++ - 对象模型之 内存布局
C++对象模型目录C++ - 对象模型之 编译器何时才会自行添加构造函数C++ - 对象模型之 内存布局C++ - 对象模型之 成员函数调用C++ - 对象模型之 构造和析构函数都干了什么C++ - 对象模型之 类对象在执行时是如何生成的C++ - 对象模型之 模板、异常、RTTI的实现C++ - 对象模型之 内存布局原创 2013-03-03 21:44:08 · 1412 阅读 · 0 评论 -
C++ - 对象模型之 类对象在执行时是如何生成的
C++对象模型目录C++ - 对象模型之 编译器何时才会自行添加构造函数C++ - 对象模型之 内存布局C++ - 对象模型之 成员函数调用C++ - 对象模型之 构造和析构函数都干了什么C++ - 对象模型之 类对象在执行时是如何生成的C++ - 对象模型之 模板、异常、RTTI的实现C++ - 对象模型之 类对象在执行时是原创 2013-02-27 05:45:57 · 2165 阅读 · 0 评论 -
C++ - 对象模型之 成员函数调用
C++对象模型目录C++ - 对象模型之 编译器何时才会自行添加构造函数C++ - 对象模型之 内存布局C++ - 对象模型之 成员函数调用C++ - 对象模型之 构造和析构函数都干了什么C++ - 对象模型之 类对象在执行时是如何生成的C++ - 对象模型之 模板、异常、RTTI的实现C++ - 对象模型之 成员函数调用原创 2013-02-23 14:42:00 · 2961 阅读 · 0 评论 -
C++ - 虚拟继承
1.为什么要引入虚拟继承虚拟继承是多重继承中特有的概念。虚拟基类是为解决多重继承而出现的。如:类D继承自类B1、B2,而类B1、B2都继承自类A,因此在类D中两次出现类A中的变量和函数。为了节省内存空间,可以将B1、B2对A的继承定义为虚拟继承,而A就成了虚拟基类。实现的代码如下:class Aclass B1:public virtual A;class B2:p转载 2013-02-22 17:44:45 · 486 阅读 · 0 评论 -
C++ - 多重继承和虚拟继承对象模型、效率分析
原文:http://blog.csdn.net/ocean2006/article/details/5836210本文简单介绍多态和多重继承、虚拟继承的基本概念。随后重点分析了C++中对象模型之间的差异和运行效率。一、多态 C++多态通过继承和动态绑定实现。继承是一种代码或者功能的传承共享,从语言的角度它是外在的、形式上的,极易理解。而动态绑定则是从语言的底层实转载 2013-02-23 10:22:29 · 737 阅读 · 0 评论 -
C++ - 回调函数
由于DDEML机制需要使用回调函数,因此使用DDEML的关键是解决在MFC编程体系中回调函数的使用。回调函数(Callback function)大量用于Windows的系统服务,通过它,程序员可以安装设备驱动程序和消息过滤系统,以控制Windows的有效使用。许多程序员都发现,利用MFC或者其它的C++应用编写回调函数是非常麻烦的,其根本原因是回调函数是基于C编程的Windows SDK转载 2013-01-27 16:36:06 · 582 阅读 · 0 评论 -
C++ - 对象模型之 构造和析构函数都干了什么
C++对象模型目录C++ - 对象模型之 编译器何时才会自行添加构造函数C++ - 对象模型之 内存布局C++ - 对象模型之 成员函数调用C++ - 对象模型之 构造和析构函数都干了什么C++ - 对象模型之 类对象在执行时是如何生成的C++ - 对象模型之 模板、异常、RTTI的实现C++ - 对象模型之 构造和析原创 2013-03-04 19:29:29 · 1358 阅读 · 1 评论 -
boost - 准备工作
安装cd boost_1_43_0执行: sudo ./bootstrap.sh sudo ./bjam install 这样boost库就安装好了。多线程编译多线程编译需要指定boost的线程库 libboost_thread.so如g++ -o a a.cpp -lboost_thread原创 2013-05-02 10:19:35 · 782 阅读 · 0 评论