随笔分类 -  C/C++ Beyond

 
C++的异常处理之二:C++11的异常处理
摘要:Reference:1. 阅读全文
posted @ 2014-07-21 14:09 做个不善的人 阅读(289) 评论(0) 推荐(0)
C++的异常处理之一:throw是个一无是处的东西
摘要:看这篇文章学习C++异常处理的基础知识。看完后,还不过瘾,为什么大家在C++代码中都不用Exception?为什么C++11会引入一些变化?为什么C++ exception handling需要unwind stack?为什么throw会被抛弃?接着看http://www.gotw.ca/publi... 阅读全文
posted @ 2014-04-21 02:42 做个不善的人 阅读(30674) 评论(1) 推荐(0)
Unichar, char, wchar_t
摘要:之前总结了一些关于字符表示,以及字符串的知识。现在在看看一些关于编译器支持的知识。L"" Prefix几乎所有的编译器都支持L“” prefix,一个字符串如果带有L“”prefix,意味着这个字符串中的字符都被作为wide char存储,但是根据OS的不同这里的wide char又各有不同,比如在Windows上默认使用UTF-16表达Unicode,而MacOSx和Linux使用UTF-32表达Unicode,也就是默认情况下:wchar_t在Windows可用于存储UTF-16的字符,长度为2个字节;而在Linux上往往用于存储UTF-32在字符,长度为4个字节。尽管 阅读全文
posted @ 2013-10-25 05:07 做个不善的人 阅读(3580) 评论(0) 推荐(0)
C++11的new concepts (move semantic)
摘要:MoveConstructible 和MoveAssignableMoveConstructibleSpecifies that an instance of the type can be move-constructed (moved). This means that type has move semantics: that is, can transfer its internal state to a new instance of the same type potentially minimizing the overhead.The type must meet CopyCo 阅读全文
posted @ 2013-08-27 12:27 做个不善的人 阅读(367) 评论(0) 推荐(0)
理解smart pointer之三:unique_ptr
摘要:unique_ptr最先在boost中被定义,后来被C++标准委员会选中为C++11的feature之一。std::unique_ptr is a smart pointer that retains sole ownership of an object through a pointer and destroys that object when the unique_ptr goes out of scope. No two unique_ptr instances can manage the same object.The object is destroyed and its me 阅读全文
posted @ 2013-08-27 12:21 做个不善的人 阅读(468) 评论(0) 推荐(0)
消失的字符(关于New CRT)
摘要:看看下面的代码有什么问题?int main( void ){ size_t MAX = 256; wchar_t * src = new wchar_t[MAX]; src[0] = L'H'; src[1] = L'i'; char *dest = new char[MAX]; size_t len = 0; wcstombs_s(&len,dest,MAX,src,MAX);}如果我们使用strlen(dest),得到的结果会是0,但是如果我们访问dst[1],其结果是i,是我们期望的,而且如果src的有效字符更多一些,除了第一个字符不在外,其他的都 阅读全文
posted @ 2013-02-01 18:42 做个不善的人 阅读(876) 评论(0) 推荐(0)
关于POD
摘要:A plain old data structure (POD) is a data structure that is represented only as passive collections of field values, without using encapsulation or other object-oriented features. POD是这样的数据结构:用组个fiel... 阅读全文
posted @ 2012-12-12 15:18 做个不善的人 阅读(3757) 评论(0) 推荐(0)
理解smart pointer之二:如何实现一个smart pointer
摘要:大家都用过smart pointer,但是如果要自己实现一个,有哪些函数需要实现呢,下面是auto_ptr的实现代码,我加了几行注释,帮助理解,同时列举哪些函数需要实现:1. explicit版的构造函数;2. 类型转换操作符,可以使auto_ptr到auto_ptr的赋值;3. Copy构造函数;4. pointer-to-member 操作符(* and –>);5. 析构函数;templateclass auto_ptr{ // wrap an object pointer to ensure destructionpublic: typedef auto_ptr _Myt; ty 阅读全文
posted @ 2012-11-12 15:38 做个不善的人 阅读(1097) 评论(0) 推荐(0)
STL的容器中存储对象和指针的利和弊
摘要:STL的容器中既可以存储对象,也可以存储指针,这里分析一下利弊,和使用时的注意事项。 STL容器的工作方式: 1. 对基本数据类型,位拷贝; 2. 对自定义的类类型对象,调用Copy构造函数,复制一份; 因此如果存放对象,对象会被复制,在容器中的对象并不是原来的对象了,进出都需要拷贝,代价很大; 如果存放指针,指针会被复制,对象不会复制,但是存放指针容易造成内存泄漏,原因是,如果某个方法new了... 阅读全文
posted @ 2012-11-11 11:56 做个不善的人 阅读(2257) 评论(0) 推荐(0)
Effective C++ 精要(第八部分:定制new和delete)
摘要:条款49:了解new-handler的行为 条款50:了解new和delete的合理替换时机 条款51:编写new和delete时需固守常规 条款52:写了placement new也要写placement delete 阅读全文
posted @ 2012-11-05 14:27 做个不善的人 阅读(189) 评论(0) 推荐(0)
Effective C++ 精要(第七部分:模板与泛型编程)
摘要:条款41:了解隐式接口和编译期多态 条款42:了解typename的双重意义 条款43:学习处理模板化基类内的名称 条款44:将与参数无关的代码抽离templates 条款45:运用成员函数模板接受所有兼容类型 条款46:需要类型转换时请为模板定义非成员函数 条款47:请使用traits classes表现类型信息 条款48:认识template元编程 阅读全文
posted @ 2012-11-05 14:25 做个不善的人 阅读(184) 评论(0) 推荐(0)
Effective C++ 精要(第六部分:继承与面向对象设计)
摘要:条款32:确定你的public继承塑模出is-a关系 条款33:避免遮掩继承而来的名称 name hiding其实是和作用域有关的话题, 但是它在继承体系中有些更微妙的东西。我们知道在一个函数中如果有个local 变量x,同时函数外还有个变量x,那在这个函数中看到的x是函数内的local变量x。也就是local变量hide了全局变量,这个是C语言中的name hiding。下面看继承时的情况,其实... 阅读全文
posted @ 2012-11-05 14:24 做个不善的人 阅读(259) 评论(0) 推荐(0)
Effective C++ 精要(第五部分:实现)
摘要:条款26:尽可能延后变量定义式的出现时间 条款27:尽量少做转型动作 条款28:避免返回Handles指向对象内部成分 条款29:为“异常安全”而努力是值得的 条款30:透彻了解inlining的里里外外 条款31:将文件间的编译依存关系将至最低 阅读全文
posted @ 2012-11-05 14:22 做个不善的人 阅读(239) 评论(0) 推荐(0)
Effective C++ 精要(第四部分:设计与声明)
摘要:条款18:让接口容易被正确使用,不易被误用 考虑我们要设计一个Date类,其构造函数接受年月日三个参数,我们是否应该用int来表示这三个参数呢?可以,但不够好,因为月日的顺序往往不同的国家有不同的习惯,如果是int很容易会被误用,好一点的办法是定义不同的struct来表达月、日和年,这样用户就没那么容易误用接口了。这这里,月和日的取值是有范围的,如果我们让类型能够反应这种范围,那用户就更不容易犯错... 阅读全文
posted @ 2012-11-05 13:38 做个不善的人 阅读(209) 评论(0) 推荐(0)
Effective C++ 精要(第三部分:资源管理)
摘要:条款13:以对象管理资源 在一个函数中,获取若干资源后,会对这些资源进行若干操作,正确的设计要求我们在函数返回时将资源释放。但是,如果在我们释放资源之前,因为异常或者过早返回导致临时资源没有被释放,就会造成资源泄漏,即使非常小心的添加delete语句,仍然无法避免某个异常发生在delete之前而造成资源泄漏。更可靠的方式是把资源放到对象中,而局部对象会在离开控制区后,C++会自动回收这个临时对象,... 阅读全文
posted @ 2012-11-03 15:23 做个不善的人 阅读(304) 评论(0) 推荐(0)
Effective C++ 精要(第二部分:构造、析构和赋值)
摘要:条款05:了解C++默默编写并调用哪些函数 如果类没有自己定义,C++编译器会自动声明一个Copy构造函数、一个Copy赋值操作符、一个析构函数和一个default构造函数。所有这些函数都是public,inline的。但是这些类并不是总是会被创建出来,只有程序中有调用,才会被编译器产生出来。编译器生成的Copy构造函数、一个Copy赋值操作符只是只是简单的将来源对象的每一个non-static成... 阅读全文
posted @ 2012-10-31 01:09 做个不善的人 阅读(327) 评论(0) 推荐(0)
C++的类型转换
摘要:显示初始化、隐式初始化和赋值 最近看了不少关于初始化和赋值的文章,其中提到最多的是要分清楚什么是赋值,什么是初始化,下面的例子都是初始化,也就是显示初始化和隐式初始化: C++隐式初始化int ival(1024);string hello("Hello world.") C++显式初始化int ival = 1024;string hello = "Hello world." Note: 注意这里"=" 语法是调用拷贝构造函数而不是赋值运算,也就是这是一个初始化操作,而不是赋值操作,因为赋值操作是在一个对象已经存在的情况下进行的,而 阅读全文
posted @ 2012-10-25 19:04 做个不善的人 阅读(3057) 评论(1) 推荐(0)
关于闭包的几篇文章
摘要:JavaScript闭包: 1. http://www.cnblogs.com/mindsbook/archive/2009/09/21/javascriptYouMustKnowClosure.html 2. http://www.felixwoo.com/archives/247 C++ Lamda表达式: 1. http://www.cprogramming.com/c++11/c++11-... 阅读全文
posted @ 2012-10-15 13:48 做个不善的人 阅读(214) 评论(0) 推荐(0)
tr1 bind的好文章
摘要:http://www.cnblogs.com/MichaelPeng/archive/2010/12/27/ABugReportOnVC2010_std_tr1_bind.html 阅读全文
posted @ 2012-10-14 23:11 做个不善的人 阅读(271) 评论(0) 推荐(0)
仿函数(又名函数对象)与仿函数配接器
摘要:如果你不懂,为什么STL的很多容器构造函数或者其他什么函数,可以既接受一个函数指针,又可以接受函数对象,你应该看看下面的介绍: 从实现来说,函数对象就是一个“行为类似函数”的对象,为了能够“行为类似函数”,其类别定义中必须自定义function call运算子(operator())。仿函数是为了STL能够实现更好的抽象性。仿函数主要用于STL中,当需要传入一个函数时使用。虽然通常来说我们可以直接... 阅读全文
posted @ 2012-10-14 22:51 做个不善的人 阅读(1171) 评论(0) 推荐(0)