2012年10月31日

[置顶] 近期要养成的学习习惯

摘要:——读“刘未鹏|一直以来伴随我的一些学习习惯”有感1 做“知识总结”,只总结要点,不罗嗦。2 重要的事情先做,重要的知识点先学,不拖沓。3 一个知识点要集中一个比较大的时间块来完成,不断断续续。4 看一些 心理学 和 思维 的书籍。5 学习一项知识之前,先理清它的知识结构,最好将内容理出主次。6 阅读一本书籍(或其中某个章节)或一篇文章之前,制定简要的阅读计划。选出最有价值的部分,知识密度低或者不太重要的地方要果断略读。7 根据主题来阅读资料,而不是根据资料来查阅主题。资料按主题分类整理。8 重要但读不懂的东西一般有3个原因:a 往后翻一翻,有些书籍讲述顺序不对,接着往下看就明白前面的了。b 阅读全文

posted @ 2012-10-31 10:12 zhuyf87 阅读(302) 评论(0) 推荐(0) 编辑

2013年4月4日

c++中的new_handler

摘要:原文地址:http://blog.csdn.net/wzq981264/article/details/673630在过去或者传统的模式中,当operator new不能满足一个内存分配请求的时候,它会返回一个空指针,但是现在如果operator new不能满足一个内存分配请求的时候,会抛出一个异常,这个时候我们可不可以自己定制处理策略呢?这正是new_handler的作用所在,具体情况在后面详细道来。 当operator new申请一个内存失败时,它会进行如下的处理步骤: 1、如果存在客户指定的处理函数,则调用处理函数(new_handler),如果不存在则抛出一个异常。new_han... 阅读全文

posted @ 2013-04-04 21:58 zhuyf87 阅读(2966) 评论(0) 推荐(0) 编辑

2013年3月23日

c++ placement new的标准用法及用途

摘要:原文地址:http://blog.csdn.net/lazyking/article/details/5319580什么是placement new?所谓placement new就是在用户指定的内存位置上构建新的对象,这个构建过程不需要额外分配内存,只需要调用对象的构造函数即可。举例来说:class foo{};foo* pfoo = new foo;pfoo指向的对象的地址是不能决定的,因为new已经为我们做了这些工作:第一步分配内存,第二步调用类的构造函数。而placement new是怎么做的呢,说白了就是把原本new做的两步工作分开来。第一步你自己分配内存,第二步你调用类的构造函数在 阅读全文

posted @ 2013-03-23 10:58 zhuyf87 阅读(361) 评论(0) 推荐(0) 编辑

c++ new的三种形态

摘要:(1)new operatornew的第一种形态是new operator,它是语言内建的,不能重载。new operator完成以下三件工作:1. allocate memory for this object.2. call constructor to init that memory.3. return the pointer of this object.例如:string *pStr = new string(“Memory Management”);它实际完成以下三件事:// 1. 为string对象分配raw内存void *memroy = operator new( size 阅读全文

posted @ 2013-03-23 10:20 zhuyf87 阅读(755) 评论(0) 推荐(1) 编辑

2013年3月19日

(MFC Combo Box)Switch between drop-list and drop-down mode

摘要:参考此贴:http://www.codeguru.com/cpp/controls/combobox/article.php/c1823/Switch-between-droplist-and-dropdown-mode.htm实现源码(经过少量修改,原版本请参考上贴)// FineCombo.h : header file//// Copyright (c) 1999 Bruno Vais//// Distribute and use freely, except:// a) Don't alter or remove this notice.// b) Mark the chang 阅读全文

posted @ 2013-03-19 19:29 zhuyf87 阅读(1220) 评论(0) 推荐(0) 编辑

2013年3月18日

(visual)c++ 内存分配

摘要:“烫”和“屯”在vc++中,栈中未初始化的内存在变量监视窗口总是显示为一串“烫”字;而堆中未初始化的内存则显示一串“屯”字。原因是:vc++编译器对栈中未初始化的内存默认设置为0xcc,而两个0xcc,即0xcccc在GBK编码中就是“烫”;而堆中未初始化的内存默认设置为0xcd,而0xcdcd在GBK编码中则是“屯”。内存分配方式程序运行时,首先要被加载到内存,程序在内存中的布局大致如下图:代码区存放程序的执行代码。数据区存放全局数据、常量、静态变量,所以在c++中数据区又可分为自由存储区(自由存储区是那些由malloc等分配的内存块,它和堆十分相似,不过它是由free来释放的)、全局/静态 阅读全文

posted @ 2013-03-18 14:38 zhuyf87 阅读(972) 评论(0) 推荐(0) 编辑

2013年3月17日

c++ new delete

摘要:当创建一个c++对象时,会发生两件事:(1)为对象分配内存。(2)调用构造函数初始化这块内容。这块内存可以位于3个区域:静态存储区、栈、堆。operator new当用new创建一个对象时,它将在堆里为对象分配内存(使用“operator new()”)并为这块内存调用构造函数。MyType * fp = new MyType;operator delete与new结合使用。delete先调用析构函数,然后释放内存。delete fp;同一指针delete两次会产生未定义行为(程序可能崩溃),所以在delete某一指针之后最好将其置0,因为delete零值指针是安全的(其行为是什么都不做)。当 阅读全文

posted @ 2013-03-17 20:10 zhuyf87 阅读(624) 评论(0) 推荐(0) 编辑

2013年3月15日

c++ RTTI(运行时类型识别)

摘要:通过RTTI,能够通过基类的指针或引用来检索其所指对象的实际类型。c++通过下面两个操作符提供RTTI。(1)typeid:返回指针或引用所指对象的实际类型。(2)dynamic_cast:将基类类型的指针或引用安全的转换为派生类型的指针或引用。对于带虚函数的类,在运行时执行RTTI操作符,返回动态类型信息;对于其他类型,在编译时执行RTTI,返回静态类型信息。当具有基类的指针或引用,但需要执行派生类操作时,需要动态的强制类型转换(dynamic_cast)。这种机制的使用容易出错,最好以虚函数机制代替之。dynamic_cast 操作符如果dynamic_cast转换指针类型失败,则返回0; 阅读全文

posted @ 2013-03-15 10:33 zhuyf87 阅读(15275) 评论(0) 推荐(0) 编辑

2013年3月13日

c++ stl algorithm: std::find, std::find_if

摘要:原文地址:http://blog.csdn.net/ilysony/article/details/6526545std::find:查找容器元素, find只能查找容器元素为<基本数据类型>#include <iostream>#include <vector>#include <algorithm>int main(){ std::vector<int> v; for (int i = 0; i < 10; ++i) v.push_back(i); std::vector<int>::iterator iter 阅读全文

posted @ 2013-03-13 14:06 zhuyf87 阅读(5355) 评论(0) 推荐(0) 编辑

vc++ warning C4541 'typeid' used on polymorphic type with GR-

摘要:在vc2008编译器下使用c++ typeid操作符时,提示如下警告,并在运行时崩溃。warning C4541: 'typeid' used on polymorphic type 'XXX' with /GR-; unpredictable behavior may result.在vc++编译器中,“/GR”选项的作用如下:When /GR is on, the compiler defines the _CPPRTTI preprocessor macro./GR- disables run-time type information.Use /GR i 阅读全文

posted @ 2013-03-13 09:45 zhuyf87 阅读(774) 评论(0) 推荐(0) 编辑

c++ typeid获取类型名

摘要:在我的项目中,有这样一个需求:在socket(TCP协议)通信部分,需要根据不同的业务协议类型分别设置一个不同的block时间。而此时我已经拿到了指向该协议(数据)对象的(父类型)指针。那最简单的区分不同协议的方式就是使用c++的 typeid操作符。typeid操作符的作用就是获取一个表达式的类型。返回结果是const type_info&。不同编译器实现的type_info class各不相同。但c++标准保证它会实现一个name()方法,该方法返回类型名字的c-style字符串。如果typeid的操作数不是类类型或者是没有虚函数的类,则typeid指出该操作数的静态类型。如果操作 阅读全文

posted @ 2013-03-13 09:23 zhuyf87 阅读(25668) 评论(3) 推荐(1) 编辑

导航