摘要: C++相比Java等含有gc的语言来说,内存管理方面(也包括资源管理)比较令人头疼。一些初级程序员,甚至是一些经验丰富的老程序员,也会经常在资源管理上犯错。这时候就需要一个能够自动管理资源的东西(gc),但是由于C++本身没有提供,那么只有我们自己实现了。 本节我不打算直接按照《Effective C++》本节的内容进行写作,而是手动实现一个智能指针(想想还有些小激动呢^_^)。 首先,我... 阅读全文
posted @ 2016-12-22 00:32 SkyFireITDIY 阅读(193) 评论(0) 推荐(0) 编辑
摘要: EC笔记:第二部分:12、复制对象时勿忘其每一个成分 1.场景 某些时候,我们不想使用编译器提供的默认拷贝函数(包括拷贝构造函数和赋值运算符),考虑以下类定义: 代码1: class Point{ private: double x; double y; public: Point()... 阅读全文
posted @ 2016-12-21 01:32 SkyFireITDIY 阅读(254) 评论(0) 推荐(0) 编辑
摘要: 已经一年半没有写过博客了,最近发现学过的知识还是需要整理一下,为知笔记,要开始收费了以前写在为知笔记上笔记也会慢慢的转到博客里。 话不多说,进入正题。 考虑考虑以下场景: 当某个对象对自身赋值时,会出现什么现象?? 例子: #include class A { private: int *arr; public: A()... 阅读全文
posted @ 2016-12-20 00:23 SkyFireITDIY 阅读(213) 评论(0) 推荐(0) 编辑
摘要: Effective C++ 学习笔记 10 让=返回指向*this的引用Table of Contents1. 原因2. 建议:在没有充分理由标新立异前,最好的做法是遵从传统。–by SkyFire1 原因在C++中,连锁赋值是合法的,新类型的=操作符应该尽量遵从这一规定(其 实他并不是规定),对于... 阅读全文
posted @ 2015-04-17 15:42 SkyFireITDIY 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 9.不在构造、析构函数中调用虚函数 1.在构造函数和析构函数中调用虚函数会产生什么结果呢? #include using namespace std; class cls1{ public: cls1(){ newMake(); }; ~cls1(){ deleteIt(); }; virtual void newMake(... 阅读全文
posted @ 2015-03-29 18:52 SkyFireITDIY 阅读(223) 评论(0) 推荐(0) 编辑
摘要: 1.为何析构函数不应该抛出异常? 有两种情况: 1).假设析构函数中有众多语句,而第一条语句抛出异常(或者其他语句),那么抛出异常以后的语句就得不到执行。而通常我们在析构函数中写的是清理资源(或回收资源)的代码,那么部分资源就不会被回收,会造成内存泄漏或程序提前结束(abort的作用)。 2).析构函数被调用的时间是在对象被销毁时,而我们很难知道(或者说没有刻意注意)对象何时被销... 阅读全文
posted @ 2015-03-29 18:51 SkyFireITDIY 阅读(136) 评论(0) 推荐(0) 编辑
摘要: 7.为多态基类声明虚析构函数 1.为多态基类声明虚析构函数 code1: class A{ public: int* a; A():a(new int(5)) {} ~A(){ delete a; } }; class B:public A { public: int *b; B():b(new int(10)) {... 阅读全文
posted @ 2015-03-29 18:49 SkyFireITDIY 阅读(165) 评论(0) 推荐(0) 编辑
摘要: 6.若不想使用编译器默认生成的函数,就该明确拒绝 1.有的时候不希望对象被复制和赋值,那么就把复制构造函数与赋值运算符放在private:中,但是这两个函数是否需要实现呢?假设实现了,那么你的类成员方法和friend函数(类)仍然可以使用这些方法,最好的方法是在private:中声明儿不定义他们,这样当成员方法或friend:函数(类)企图调用这些方法的时候,会报出链接错误,因为方法没有被实现。(... 阅读全文
posted @ 2015-03-29 18:45 SkyFireITDIY 阅读(183) 评论(0) 推荐(0) 编辑
摘要: 5.了解C++默默编写并调用哪些函数 1.C++空类 C++会为一个空类建立以下函数 (1).默认构造函数 (2).默认拷贝构造函数 (3).析构函数 (4).赋值运算符(如果成员包含... 阅读全文
posted @ 2015-03-29 18:42 SkyFireITDIY 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 04.确定对象初始化 将对象初始化,C++反复无常,所以在使用前应该手动初始化 1.分清赋值与初始化 以下例子: class test{ public: int a; test(){ a=0;//赋值而非初始化 } }; class test2{ public: int a; test():a(0){... 阅读全文
posted @ 2015-03-28 22:22 SkyFireITDIY 阅读(174) 评论(0) 推荐(0) 编辑