effective C++
文章平均质量分 78
hustyangju
这个作者很懒,什么都没留下…
展开
-
effective c++ 条款01 整理
书中将C++划分为4个次语言,期望将混乱的C++体系进行简单的梳理,只能说目的达到了,但这么分合适不合适呢?不知道....(1)C(C++ without class)初级C++确实是对C的延生,这也涉及到C++是否应该严格兼容C的问题,历史问题不去评判,但这是事实。(2)面向对象C++(Object-Oriented C++)涉及到类、封装、继承、多态和虚拟(动态绑定)机制,这也原创 2014-11-26 16:39:15 · 871 阅读 · 0 评论 -
effective c++条款26-31“class and function的实现”整理
一、类的实现面临的问题:太快定义变量可能造成效率上的拖延;过度使用转型(casts)可能导致代码变慢又难维护,又招来微妙难解的错误;返回对象“内部数据之号码牌(handls)”可能会破坏封装并留给客户虚吊号码牌;为考虑异常带来的冲击则可能导致资源泄漏和数据败坏;过度热心地inlining可能引起代码膨胀;过度耦合则可能导致让人不满意的冗长建置时间。二、条款26:尽可能延后变量定义式的出原创 2014-12-08 09:47:34 · 1145 阅读 · 0 评论 -
effective c++条款13-17 “以对象管理资源”之C++类型转换函数和构造函数
其实我们已经在C/C++中见到过多次标准类型数据间的转换方式了,这种形式用于在程序中将一种指定的数据转换成另一指定的类型,也即是强制转换,比如:int a = int(1.23),其作用是将1.23转换为整形1。然而对于用户自定义的类类型,编译系统并不知道如何进行转换,所以需要定义专门的函数来告诉编译系统改如何转换,这就是转换构造函数和类型转换函数! 一、转换构造函数原创 2014-12-02 10:47:57 · 855 阅读 · 0 评论 -
effective c++18-25条款“接口设计与声明”整理
一、让接口容易被正确使用,不易被误用接口设计的原则是,方便日后和其他用户的使用,不要把问题留给接口使用者(1)用常规的用法调用“特别”设计的接口。所以需要尽可能的把自己的设计往常规上靠:数据对象的行为要尽可能符合内建对象(比如int)的行为;接口的名字和意义要尽可能一致(比如STL中的容器基本都有一个叫做size的返回容器大小的接口)……这样做鼓励用户去正确的看待和使用你的接口。原创 2014-12-03 16:55:45 · 928 阅读 · 0 评论 -
effective c++条款13-17 “以对象管理资源”之shared_ptr浅析
顾名思义,boost::shared_ptr是可以共享所有权的智能指针,首先让我们通过一个例子看看它的基本用法:#include #include #include class implementation{public: ~implementation() { std::cout <<"destroying implementation\n"; } void d原创 2014-12-01 15:48:06 · 842 阅读 · 0 评论 -
effective c++条款13-17 “以对象管理资源”之auto_ptr源码分析
auto_ptr是当前C++标准库中提供的一种智能指针,诚然,auto_ptr有这样那样的不如人意,以至于程序员必须像使用”裸“指针那样非常小心的使用它才能保证不出错,以至于它甚至无法适用于同是标准库中的那么多的容器和一些算法,但即使如此,我们仍然不能否认这个小小的auto_ptr所蕴含的价值与理念。这里用了Nicolai M. Josuttis(>作者)写的一个auto_ptr的版本,并原创 2014-12-01 15:30:31 · 776 阅读 · 0 评论 -
effective c++条款13-17 “以对象管理资源”之RAII浅析
RAII是指C++语言中的一个惯用法(idiom),它是“Resource Acquisition Is Initialization”的首字母缩写。中文可将其翻译为“资源获取就是初始化”。虽然从某种程度上说这个名称并没有体现出该惯性法的本质精神,但是作为标准C++资源管理的关键技术,RAII早已在C++社群中深入人心。使用局部对象管理资源的技术通常称为“资源获取就是初始化”。这种通用技术依赖原创 2014-12-01 15:21:59 · 729 阅读 · 0 评论 -
effective c++条款10-12(operator=(重载返回类型、自我赋值和深层复制))整理
一、重载operator=返回类型下面举例说明,operator=类似。针对:ostream & operator 说明几点:1.第一个形参为对ostream对象的引用,在该对象上将产生输出,ostream为非const,因为写入到流会改变流的状态;该形参是一个引用,因为不能复制ostream对象(在c++中定义的标准输入输出流类istream和ostream,其中拷贝构造函数和赋原创 2014-11-30 17:11:06 · 1326 阅读 · 0 评论 -
RAII惯用法:C++资源管理的利器(转)
原文:http://www.cnblogs.com/hsinwang/articles/214663.htmlRAII是指C++语言中的一个惯用法(idiom),它是“Resource Acquisition Is Initialization”的首字母缩写。中文可将其翻译为“资源获取就是初始化”。虽然从某种程度上说这个名称并没有体现出该惯性法的本质精神,但是作为标准C++资源管理的关键技术,转载 2014-12-01 09:52:32 · 868 阅读 · 0 评论 -
effective c++ 条款 04 (对象初始化)整理
确定对象使用前已被初始化原则:不论是类的成员变量还是其他作用域的变量,使用前都要保证已被初始化(或者说赋值)一、无任何成员的内置类型初始化/*内置类型通过复制完成初始化*/int x = 0;const char* a = "abc";int a[2] = {0,0};二、STL容器初始化STL容器关注容器大小,防止越界,初始化的工作不用关心三、类成员变量初始化原创 2014-11-27 10:04:14 · 923 阅读 · 0 评论 -
effective c++ 条款07(为多态基类声明virtual析构函数)整理
一、虚函数表原理陈皓的一篇blog讲的很透彻:http://blog.csdn.net/haoel/article/details/1948051/虚函数表可以分为:单一继承无虚函数覆盖、单一继承有虚函数覆盖、多重继承无虚函数覆盖和多重继承和有虚函数覆盖。注意与虚拟继承区分开来二、多态实现原理多态则是通过继承、虚函数(virtual)、指针来实现。原创 2014-11-27 16:15:10 · 965 阅读 · 0 评论 -
effective c++ 条款05、06(编译器自动生成函数)整理
一、编译器为空类生成函数的原型以及函数创建的时机在C++中当创建一个空类时,C++就会默认的为这个类创建4个函数:默认的构造函数、析构函数、拷贝构造函数、以及赋值操作符。C++中创建一个空类:class Empty {};默认会生成4个函数,其函数的原型如下:public: Empty() { ... } Empty(const Empty& rhs) {原创 2014-11-27 11:22:01 · 1029 阅读 · 0 评论 -
effective c++ 条款03 整理
尽可能使用const(1)const约束指针、迭代器const char* p = "adc"; //non-const pointer,const datachar* const p = "abc"; //const pointer,non-const dataconst char* const p = "abc";//const pointer,const dataconst s原创 2014-11-26 20:19:25 · 760 阅读 · 0 评论 -
effective c++ 条款02 整理
尽量以const、enum和inline代替#define一、#define的功能参考:http://www.crifan.com/_define_detailed/(1) #define的变体,即#ifndef,可以防止头头文件的重复引用#ifdef和 #define组合,一般用于头文件中,用以实现防止多个文件对此同一个头文件的重复引用.实际使用中,即使你的头文件暂时没有被多个文原创 2014-11-26 19:36:50 · 1412 阅读 · 0 评论 -
effective c++条款32~40“继承与面向对象设计”整理
条款32:确定你的public继承塑模出is-a关系以C++进行面向对象编程,最重要的一个规则是:public inheritance(公有继承)意味is-a(是一种)的关系。在C++领域中,任何函数如果期望获得一个类型为基类的实参(而不管是传指针或是引用),都也愿意接受一个派生类对象(而不管是传指针或是引用)。(只对public继承才成立。)好的接口可以防止无效的代码通过编译,因此你应该原创 2014-12-10 15:38:04 · 669 阅读 · 0 评论