Effective C++
文章平均质量分 52
feng鸽
一点点的成长,最终会成为参天大树.
展开
-
Effective C++学习笔记(一)
设计上的讨论集中于“如何在两个不同的做法中择一完成某项任务”,你该选择继承还是模板?选择public 继承还是private继承?该选择private继承还是composition?该选择member函数还是non-memer函数?该选择pass-by-value还是pass-by-reference?在这些选择点上做出正确决定很重要,因为一个不良的决定可能不至于很快带来影响,却在后期才显现恶果,原创 2016-11-10 17:19:49 · 288 阅读 · 0 评论 -
Effective C++学习笔记(十六)
一旦程序员领悟了pass-by-value(传值)的效率牵连层面,往往变成十字军战士,一心一意根除pass-by-value带来的种种邪恶。在坚定追求pass-by-reference的纯度中,他们一定会犯下一个致命错误:开始传递一些references指向其实并不存在的对象,这可不是件好事。考虑一个用以表现有理数的class,内含一个函数用来计算两个有理数的乘积:class Ration原创 2016-11-27 22:03:08 · 242 阅读 · 0 评论 -
Effective C++ 学习笔记(十五)
缺省情况下C++以by value方式(一个继承自C的方式)传递对象至(或来自)函数。除非你另外指定,否则函数参数都是以实际实参的复件(副本)为初值,而调用端所获得的亦是函数返回值的一个复件。这些复件(副本)系由对象的copy构造函数产出,这可能使pass-by-value成为昂贵(费时的)操作。class Person{ public: Person(); vi原创 2016-11-27 21:04:48 · 226 阅读 · 0 评论 -
Effective C++ 学习笔记(十四)
开发一个“容易被正确使用,不容易被误用”的接口,首先必须考虑客户可能做出什么样的错误。假设你为一个用来表现日期的class设计构造函数:class Date{ public: Date(int month,int day,int year);};但它的客户很容易犯至少两个错误,第一,它们会以错误的次序传递参数:Date d(30,3,1995);(键原创 2016-11-26 22:36:55 · 302 阅读 · 0 评论 -
Effective C++ 学习笔记(十三)
int priority();void processWidget(std::tr1::shared_ptr pw,int priority);调用processWidget:processWidget(new Widget,priority());它不能通过编译。tr1::shared_ptr构造函数需要一个原始指针,但该构造函数是个explict构造函数,无法原创 2016-11-15 00:46:05 · 205 阅读 · 0 评论 -
Effective C++ 学习笔记(十二)
当你使用new生成一个对象时,有两件事发生。第一,内存被分配出来,第二,针对此内存会有一个(或者更多)构造函数被调用。当你使用delete,也有两件事发生,针对此内存有一个(或者更多)析构函数被调用,然后内存才被释放如果你调用new时使用[],你必须在对应调用delete时也使用[],如果你调用new时没有使用[],那么也不该在对应调用delete时使用[].原创 2016-11-15 00:38:25 · 283 阅读 · 0 评论 -
Effective C++ 学习笔记(十一)
资源管理类是对抗资源泄露的堡垒。排除此等泄露是良好设计系统的根本性质。依赖classes来处理和资源之间的所有互动,而不是玷污双手直接处理原始资源。使用智能指针如auto_ptr或者tr1::shared_ptr保存factory函数如createInvestment的调用结果。std::tr1::shared_ptr pInv(createInvestment());假设希望以某个函原创 2016-11-15 00:11:01 · 261 阅读 · 0 评论 -
Effective C++ 学习笔记(十)
资源取得时机便是初始化时机,描述了auto_ptr和tr1::shared_ptr如何将这个观念表现在heap-based资源上。并非所有资源都是heap-based,所以偶尔需要建立自己的资源管理类。void lock(Mutex* pm); //锁定pm所指的互斥器void unlock(Mutex* pm);//将互斥器解除锁定为确保不会忘记将一个被锁住的Mu原创 2016-11-14 23:56:12 · 192 阅读 · 0 评论 -
Effective C++ 学习笔记(九)
auto_ptr的替代方案是“引用计数型智慧指针(RCSP)”,所谓RCSP也是智能指针,持续追踪共有多少对象指向某笔资源,并在无人指向它时自动删除该资源。RCSP无法打开环状引用(如两个其实已经没被使用的对象彼此互指,因而好像还处在“被使用”状态)。tr1::shared_ptr pInv(createInvestment());//调用factory函数原创 2016-11-14 23:42:50 · 173 阅读 · 0 评论 -
Effective C++学习笔记(八)
所谓资源就是 ,一旦用了它 ,将来必须还给系统,如果不这样糟糕的事情就会发生。C++最常使用的资源就是动态分配内存,但内存只是你必须管理的众多资源之一。其他资源还包括文件描述器,互斥锁,图形界面中的字型和笔刷,数据库连接,以及网络socket.把资源放进对象内,便可依赖C++的“析构函数自动调用机制“确保资源被释放。class Investment{......};原创 2016-11-14 23:13:44 · 182 阅读 · 0 评论 -
Effective C++ 学习笔记(七)
class TextBlock{ public: const char& operator[] (std::size_t position) const //一如既往 { return text[position]; } char & operator [] (std::size_t position)原创 2016-11-10 23:02:43 · 344 阅读 · 0 评论 -
Effective C++ 学习笔记(六)
两个成员函数如果只是常量性不同,可以被重载,这实在是一个重要的C++特性。class TextBlock{ public: const char& operator[] (std::size_t position ) const {return text[position];} char & operator[] (st原创 2016-11-10 21:07:14 · 177 阅读 · 0 评论 -
Effective C++学习笔记(五)
const 成员函数: 将const实施于成员函数的目的,是为了确认该成员函数可作用于const对象身上。这一类成员函数之所以重要,第一,它们使class接口比较容易被理解。因为得知哪个函数可以改动对象内容哪个函数不行,是很重要的。第二,使“const对象”成为可能。 两个成员函数如果只是常量性(constness)不同,可以被重载。 class Te原创 2016-11-10 20:39:27 · 179 阅读 · 0 评论 -
Effective C++学习笔记(四)
面对指针,你可以指出指针自身、指针所指物,或者两者都(或都不)是const.char greeting[]="Hello";char *p =greeting; //non-const pointer,non-const dataconst char* p=greeting;原创 2016-11-10 20:24:07 · 183 阅读 · 0 评论 -
Effective C++学习笔记(三)
class GamePlayer{ static const int NumTurns=5; //常量声明式 int scores[NumTurns]; //使用该常量};通常C++要求你对你所使用的任何东西提供一个定义式,但如果他是个class专属常量又是static且为整数类型,则需特殊处理。#define不仅不能够用来定义class专属常量,也不能够提供任何封装原创 2016-11-10 19:58:01 · 365 阅读 · 0 评论 -
Effective C++学习笔记(二)
copy构造函数被用来“以同型对象初始化自我对象”,copy assignment操作符被用来“从另一个同型对象中拷贝其值到自我对象”:class Widget{public Widget();Widget(const Widget& rhs);Widget & operator = (const Widget & rhs);};Widget w1;WIdg原创 2016-11-10 18:04:35 · 179 阅读 · 0 评论 -
智能指针
应使用哪种智能指针呢?如果程序要使用多个指向同一个对象的指针,应选择shared_ptr.这样的情况包括:一个指针数组,并使用一些辅助指针来标识特定的元素,如最大的元素和最小的元素:两个对象包含都指向第三个对象的指针:STL容器包含指针。很多STL算法都支持复制和赋值操作,这些操作可用于shared_ptr,但不能用于unique_ptr和auto_ptr.如果编译器没有提供share原创 2017-04-09 00:17:19 · 192 阅读 · 0 评论