摘要: EC笔记:第4部分:22、所有成员都应该是private的 更简单的访问 用户不用记得什么时候该带上括号,什么时候不用带上括号(因为很确定的就要带上括号) 访问限制 对于public的成员变量,我们可以随意对其设置值(无论合法还是非法,它都会无条件接受) 但是我们如果将其设置为private的,那么就可以只向外暴露接口,我们不仅可以通过这些接口控制成员的访问权限(读写、只读、只写、禁止访问... 阅读全文
posted @ 2017-01-06 23:41 SkyFireITDIY 阅读(218) 评论(0) 推荐(0) 编辑
摘要: 使用应用可以大幅减少构造函数与析构函数的调用次数,但是引用不可以滥用。 如下: struct St { int a; }; St &func(){ St t; return t; } 在返回t以后,t会被销毁,但是它的引用还在外面被使用,这样的操作是不可预料的。 那么,我们返回一个指针如何? struct St { ... 阅读全文
posted @ 2017-01-03 21:51 SkyFireITDIY 阅读(303) 评论(0) 推荐(0) 编辑
摘要: 考虑以下场景: #include #include using namespace std; struct Person { string name; int age; }; class Manager{ private: Person person; public: ... 阅读全文
posted @ 2017-01-02 23:44 SkyFireITDIY 阅读(315) 评论(0) 推荐(0) 编辑
摘要: 设计一个class,应该考虑以下问题: 新type的对象应该怎样创建和销毁? 构造函数 析构函数 内存分配 内存释放 对象的初始化和对象的赋值应该有什么样的差别? 拷贝构造函数 赋值运算符 新对象如果被用值传递,这意味着什么呢? 拷贝构造函数 新对象的合法持有哪些? Setter 错误检查 对象是否会被继承?是否继承自其他类型? 虚函数 析构函数 新类型需要什么样的转换? Operator操作符 ... 阅读全文
posted @ 2016-12-29 19:54 SkyFireITDIY 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 好的接口容易被正确使用,不易被误用 考虑以下函数: void func(int year,int month,int day){ //一些操作 } 这个函数看似合理,因为参数的名字已经暴露了它的用途。但是如果只有寒暑签名呢?如下: void func(int,int,int); 就算我告诉你,此处需要日期作为参数,你可能会以月日年、日月年等... 阅读全文
posted @ 2016-12-29 00:34 SkyFireITDIY 阅读(264) 评论(0) 推荐(0) 编辑
摘要: 一般的智能指针都是通过一个普通指针来初始化,所以很容易写出以下的代码: #include using namespace std; int func1(){ //返回一个整数的函数 } void func2(AutoPtr ptr,int t){ //一些操作 } int ... 阅读全文
posted @ 2016-12-26 22:09 SkyFireITDIY 阅读(223) 评论(0) 推荐(0) 编辑
摘要: 我们都知道,申请的资源,使用完毕后要释放。但是这个释放动作,一定要注意。 举个例子,很多人动态分配的资源,在使用之后,往往直接调用了delete,而不管申请资源的时候用的是new还是new[]。 如下: #include using namespace std; int main(){ int *p; p=new ... 阅读全文
posted @ 2016-12-25 22:05 SkyFireITDIY 阅读(223) 评论(0) 推荐(0) 编辑
摘要: 使用对象来管理资源,可以避免因个人疏忽带来的一些低级错误,但是不是每件事都是称心如意的。 一些函数依然使用原始的资源对象,那么我们就需要为这些函数提供一个接口,让他们可以获取到原始对象。 继续拿13节的智能指针说事,先上代码: //SFAutoPtr.h #pragma once template class SFAutoPtr { private: ... 阅读全文
posted @ 2016-12-23 23:15 SkyFireITDIY 阅读(335) 评论(0) 推荐(0) 编辑
摘要: 开始学习逆向,小激动^_^ 记录每天的进步,只有努力不会背叛自己! 本系列博客采用《逆向过程核心原理》这本书作为参考教材,说白了,就是这本书的读书笔记^_^ 逆向工程的定义我就不多说了,大神必备装逼技能之一。 关于"打补丁"和"破解":从名字看就知道,"打补丁"的人是好人,如微软就经常给他们的Windows打补丁,而"破解"就是坏人,一般说"xxx破解了某软件"一般的意思就是"xxx侵害了... 阅读全文
posted @ 2016-12-22 23:17 SkyFireITDIY 阅读(745) 评论(0) 推荐(0) 编辑
摘要: 场景 上一节实现了智能指针,其中的拷贝构造函数和赋值运算符是通过增加/减少指针的引用计数来操作的。但是如果是管理一个独占资源呢?我们希望在一个资源使用时被锁定,在使用完毕后被释放。 #include #include #include using namespace std; mutex mu; int rc=5; void thread1(){... 阅读全文
posted @ 2016-12-22 23:01 SkyFireITDIY 阅读(319) 评论(0) 推荐(0) 编辑