上一页 1 ··· 4 5 6 7 8 9 10 11 下一页
摘要: (参考自 http://www.cnblogs.com/hazir/p/new_and_delete.html)1. new和delete不是函数,是C++的关键字.2. new一个对象的实际操作分为两步:1). 调用标准库函数operator new分配内存 2)调用构造函数初始化(如果new的是... 阅读全文
posted @ 2015-08-23 11:27 Reasno 阅读(180) 评论(0) 推荐(0) 编辑
摘要: 1. 有时资源管理类(resource-managing classes)需要提供对资源的直接访问,这就需要将RAII class对象转换为其内含的原始资源,有两种做法可以达成目标:显式转换和隐式转换.2. 显式转换:shared_ptr和auto_ptr都提供一个get成员函数,用来执行显式转换,... 阅读全文
posted @ 2015-08-23 09:53 Reasno 阅读(207) 评论(0) 推荐(0) 编辑
摘要: 1. 条款13导入RAII的观念:资源获取时机便是初始化时机,资源会在不需要的时刻被销毁,典型代表就是shared_ptr和weak_ptr,但是并非所有资源都是堆内存,例如外存和堆栈,在这种情况下,auto_ptr,shared_ptr,weak_ptr显然不适合作为资源管理类,这就需要建立自己的... 阅读全文
posted @ 2015-08-22 21:42 Reasno 阅读(233) 评论(0) 推荐(0) 编辑
摘要: 1. 在使用堆内存时,需要手动delete指针以防内存泄露,但是有些例外情况(例如发生异常)会使得内存资源无法释放,此外,使用者也极有可能忘记释放堆内存,因此需要"以对象管理资源",也就是把资源放进对象内,用析构函数来确保资源被释放,这种思想被称为"资源取得时机就是初始化时机"(Resource A... 阅读全文
posted @ 2015-08-22 20:51 Reasno 阅读(472) 评论(0) 推荐(0) 编辑
摘要: 1. 编译器合成的拷贝构造函数默认调用基类的拷贝构造函数,合成的拷贝构造操作符也是一样.2. 对于自己编写的拷贝构造函数,编译器不再默认调用基类的拷贝构造函数,仅在拷贝构造函数中没有初始化基类部分时调用默认构造函数.对于自己编写的拷贝赋值操作符,编译器不额外作任何操作(即使类的编写者忘记调用基类的拷... 阅读全文
posted @ 2015-08-22 16:46 Reasno 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 1. 为了支持形如“a=b=c”的连锁形式,最好令operator=返回一个reference to *this.2. 如果类中含有用于指向堆内存的指针,那么赋值操作符就要注意自我赋值的问题,例如:class A{public: ... A& operator=(const A& tmp... 阅读全文
posted @ 2015-08-22 15:08 Reasno 阅读(275) 评论(0) 推荐(0) 编辑
摘要: 1. 在一个继承体系中,最底层的派生类在构造过程中,先初始化基类部分,再按继承层次依次初始化派生类部分,因此被构造的对象先作为一个基类对象,再按继承层次依次成为派生类对象,例如,在继承层次A→B→C→D中,构造一个D类对象,其依次经历了A→B→C→D的转变,因此对于以下代码:#include usi... 阅读全文
posted @ 2015-08-22 15:04 Reasno 阅读(230) 评论(0) 推荐(0) 编辑
摘要: 1. 当异常发生时,如果异常发生在一个try块内部,程序就会跳出该try块,并逐层寻找匹配的catch,跳出try块的过程中,会销毁该try内创建的对象并调用析构函数,如果调用析构函数的过程中又发生异常,程序就会调用标准库terminate函数(terminate函数调用abort函数)结束执行,例... 阅读全文
posted @ 2015-08-22 11:09 Reasno 阅读(575) 评论(0) 推荐(0) 编辑
摘要: 1. 左值与右值: C++对于左值和右值没有标准定义,但是有一个被广泛认同的说法:可以取地址的,有名字的,非临时的就是左值;不能取地址的,没有名字的,临时的就是右值. 可见立即数,函数返回的值等都是右值;而非匿名对象(包括变量),函数返回的引用,const对象等都是左值. 从本质上理解,创建和销毁由 阅读全文
posted @ 2015-08-21 11:16 Reasno 阅读(2219) 评论(0) 推荐(0) 编辑
摘要: 1. 成员函数只有被需要(被调用)才必须有定义,同理,只有当默认构造函数,拷贝构造函数,赋值操作符,析构函数被需要而类定义它们时,它们才会被编译器创建出来(除非函数在基类中被声明为虚函数,编译器产生的函数是非虚的,public的).2. 并不是只要类没有定义默认构造函数,拷贝构造函数,赋值操作符时编... 阅读全文
posted @ 2015-08-19 15:20 Reasno 阅读(187) 评论(0) 推荐(0) 编辑
上一页 1 ··· 4 5 6 7 8 9 10 11 下一页