随笔分类 - C/C++
摘要:临界区和互斥锁的区别1、临界区只能用于对象在同一进程里线程间的互斥访问;互斥锁可以用于对象进程间或线程间的互斥访问。2、临界区是非内核对象,只在用户态进行锁操作,速度快;互斥锁是内核对象,在核心态进行锁操作,速度慢。3、临界区和互斥体在Windows平台都下可用;Linux下只有互斥锁可用
阅读全文
摘要:在Windows的多线程编程中,创建线程的函数主要有CreateThread和_beginthread(及_beginthreadex)。CreateThread 和 ExitThread 使用API函数CreateThread创建线程时,其中的线程函数原型: DWORD WINAPI Thread...
阅读全文
摘要:如果要自己定义STL容器的元素类最好满足STL容器对元素的要求 必须要求: 1、Copy构造函数 2、赋值=操作符 3、能够销毁对象的析构函数 另外: 1、可用的缺省构造函数,序列型容器必须,用于初始化元素 2、==操作符定义,用于判断相等 3、 #include #include using n...
阅读全文
摘要:C++中堆和栈的完全解析内存分配方面:堆: 操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删 除,并将该结点的空间分配给程序,另外,对于大多数系统,会在这块内存空间中的首地址处记录本次分配的大小,这样代码...
阅读全文
摘要:网上关于开源日志工具log4cplus的说明有很多,但大多略显复杂,本文主要从实用的角度,介绍一种最简单而且又实用的方法。本文的方法已经足够满足实际工程中的使用需求,而且不需要很复杂的流程,可以实现.log文件以及console窗口同时显示log信息。当然,想要深度定制,那就要去看看别的帖子了。st...
阅读全文
摘要:今天遇到一个非常难以排查的BUG,谷歌度娘都问过了依旧无解,最后自己重新尝试之后找到解决方案:先看一下报错信息:1>.\lenz.cpp(2197) error C2679: binary ' D:\Program Files\VC\include\ostream(650): coul...
阅读全文
摘要:之前遇到棘手的BUG总是在处理过后就不管了,导致后面碰到相同问题后重复工作太多。现专门开辟一篇日志以记录接下来一路上比较棘手的“坑”的修复历程: 【C++篇】 1.mt.exe : general error c101008d: Failed to write the updated manifes
阅读全文
摘要:近期的一个app是本地的,数据源来自于本地的一个.json文件,里面的数据是这个app的灵魂。近期快发布该app了,很担心发布后的.ipa包被竞争者解开然后信息发生泄漏。我的处理策略是:打包的时候放的是一个字符串加密过的json文件,就算别人打开也是乱码。在程序加载时就对该文件进行解码,在沙盒里面生...
阅读全文
摘要:下面有从浅入深的6个问题,您可以尝试回答一下一个如下的语句for (int i = 0; i 0且f(x2)0,则函数的根就在区间x3和x2之间,如果f(x3)0;如果你把main函数里所有的操作都注释掉,那么程序什么都不做,就不可能有bug,那就好比是f(x2)不可省略):>Debug.Print a bMSDN参考:ms-help://MS.MSDNQTR.v90.en/dv_vscmds/html/48711628-1909-4713-a73e-d7b714c77f8a.htmms-help://MS.MSDNQTR.v90.en/dv_vscmds/html/d33e7937-7
阅读全文
摘要:智能指针机制跟Objective-C里面的retainCount引用计数有着相同的原理,当某个对象的引用计数为0是执行delete操作,类似于autorelease初学者在使用智能指针时,很多情况下可以把它当做标准C++中的T*来理解。比如:typedef boost::shared_ptr CMyLargeClassPtr;std::vector vec;vec.push_back( CMyLargeClassPtr(new CMyLargeClass("bigString")) );这里的CMyLargeClassPtr可以用CMyLargeClass *来理解,但是在
阅读全文
摘要:pimpl (the pointer-to-implementation idiom)手法在 C++ 里已是“高手”们广泛运用的成熟方法之一,它的优点很多,诸如降低编译依赖、提高重编译速度之类的工具性优势自不待赘言,而其对“保持接口稳定性”的优点更值得称道。 It makes it possible to avoid other classes to know internal data structures and other information of the class. It also simplifies some#includepreprocessor instruct...
阅读全文
摘要:这篇文章主要写给那些以前没有用过VS的新手,同时也是自己学习经验的积累,高手就不用看了以免浪费您宝贵的时间。在VS的工程中常常要设置头文件的包含路径,当然你可以使用绝对路径,但是如果你这样设置了你只能在你自己的机器上运行该工程;如果其他人拷贝你的工程到其他机器上就可能无法运行,这个是因为你在建工程时可能把工程放在了E:盘,但是其他人可能会把工程放在其他根目录下,这样会导致找不到头文件问题。对于新手,在设置绝对路径时往往会犯浑,他们不清楚这里的“相当”究竟是以什么位置为起点。其实这里的相对路径就是相当于工程文件(XXXX.vcproj)为起点零计算出的能找到包含所需头文件(也就是找包含所需头文件
阅读全文
摘要:由于使用版本管理器协调工作,有时同事就直接上传文件夹了,但右键添加现有项时不能添加文件夹的.在工具栏"项目"下面有个"显示所有文件",选择这个,整个工程的文件都会显示出来,这时你会发现别人新上传的文件已经自动显示在你的工程里面了,但是,你还必须选中它,并右键选择"包括在项目中"
阅读全文
摘要:建议看原帖 地址:http://blog.csdn.net/lwbeyond/article/details/6202256一. 什么是拷贝构造函数首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:inta=100;intb=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。#includeusingnamespacestd;classCExample{private: inta;public://构造函数 CExample(intb) {a=b;}//一般函数 voidShow() {coutusingnamespacest
阅读全文
摘要:对于习惯使用C进行开发的朋友们,在看到c++中出现的&符号,可能会犯迷糊,因为在C语言中这个符号表示了取地址符,但是在C++中它却有着不同的用途,掌握C++的&符号,是提高代码执行效率和增强代码质量的一个很好的办法。在c++学习提高篇(3)---隐式指针的文章中我详细介绍了在隐式指针&的用法,其实这两个概念是统一的。引用是C++引入的新语言特性,是C++常用的一个重要内容之一,正确、灵活地使用引用,可以使程序简洁、高效。我在工作中发现,许多人使用它仅仅 是想当然,在某些微妙的场合,很容易出错,究其原由,大多因为没有搞清本源。故在本篇中我将对引用进行详细讨论,希望对大家更
阅读全文
摘要:问题如下:我定义了如下的一个结构体:typedef struct{ CString csText;}MyStruct;并有如下的程序段1:MyStruct * p=NULL;p=(MyStruct *)malloc(sizeof(MyStruct));if(!p) AfxMessageBox("分配内存失败!");else{ p->csText="hello world!"; free(p);}执行程序段1,会出现一个内存读取异常,系统提示程序非法read了一个地址。换成如下写法也是错的:MyStruct astruct;astruct.csTex
阅读全文
摘要:什么时候会用到拷贝构造函数?1-什么时候会用到拷贝构造函数?2-什么时候有必要手动写拷贝构造函数?1-什么时候会用到拷贝构造函数? 当任何你想复印东西的时候,而不管东西被复印成什么样子。即任何你想利用一个已有的类实例给另一个类实例赋值时,这种赋值可能是显式的,也可能是隐式的显式:classa_1=class_2;隐式:函数的形参有用到类对象却没有用引用或传址技术时 函数的返回值是一个对象也没有应用传址技术时2-什么时候有必要用拷贝构造函数?上述3种情况,如果没有涉及到深拷贝问题,就没有必要自己来编写拷贝构造函数,编译器有默认的可以很完美的完成任务还一种情况就是变态的拷贝:在拷内过程中进行缩放,
阅读全文
摘要:AfxMessageBox的函数原型intAfxMessageBox( LPCTSTR lpszText, UINT nType = MB_OK, UINT nIDHelp = 0 );int AFXAPIAfxMessageBox( UINT nIDPrompt, UINT nType = MB_OK, UINT nIDHelp = (UINT) –1 );在第一种形式中,lpszText表示在消息框内部显示的文本,消息框的标题为应用程序的可执行文件名(如Hello)。在第二种形式中,nIDPrompt为要显示的文本字符串在字符串表中的ID。函数调用时会自动从字符串表中载入字符串并显示在消息
阅读全文
摘要:在Windows中,字符集编码有两种:ANSI和Unicode。ANSI使用单字节,一般用于处理英文,而中文是双字节字符。所以,在处理中文字符时,ANSI编码有时会不方便,出现半个汉字的情况,于是就造成乱码。Unicode编码使用双字节,即每个字符都占两个字节,这可以很好地兼容汉字。因为不能确定编译完的程序最终会用在什么环境什么字符集上,所有为了提高兼容性,我们一般要在中文字符串前,加宏_T,_TEXT。比如:_T(”你好,MFC“)若程序以ANSI格式编译,则_T宏其实没有起任何作用若程序以Unicode格式编译,则_T会把”你好,MFC“以Unicode格式保存,中英文都被处理。而另一个_
阅读全文
摘要:1.关于某函数返回指针问题:1 int *func(int a[])2 {3 int * b = a;4 return b;//指针b并没有被释放5 }6 7 int *c = func(array);看上面的这个例子,指针b在函数func内没有被释放。在IOS里面,一般的措施是 return [b autorelease]; 编译器会自动跟踪b对象的使用情况,自动释放。但在c/c++里面是没有autorelease机制的。那怎么办呢?我们要明确一个问题,在上面的例子中,是肯定会发生内存泄露的。处理的方法是,在调用的地方,对接收者进行释放,即在使用完c指针后,对c进行释放...
阅读全文