05 2013 档案

摘要:举书上的例子:1 int GetPriority();2 void processWidget(shared_ptr<Widget> pw, int priority);如果这样调用processWidget:processWidget(new Widget(), GetPriority());注意一下两边的类型,左边是管理者shared_ptr<Widget>类,而右边是被管理者Widget类,两边类型不等,编译器会试图执行类型隐式转换,但为了安全起见,shared_ptr的构造函数前面有修饰符explicit,它不允许发生隐式转换,所以编译器会报错。但如果这样:pr 阅读全文
posted @ 2013-05-26 19:59 Jerry19880126 阅读(637) 评论(3) 推荐(0) 编辑
摘要:这个条款比较好理解,就是new有两种形式:1 int *p = new int(); // 申请一个int资源2 int *p = new int[3]; // 申请连续三块int资源而delete也有两种资源:1 delete p; // delete指针所指向的单一资源2 delete [] p; // delete指针所指向的多个连续资源块那么该各用哪一种形式呢?一个简单又好记的规则就是:在new如果使用了[],那么delete也去用[];反之则都不用。一句话,都用或者都不用。但事实上,如果用错了,编译器不会给任何提示,也没有运行错(VS2008环境),这些行为是“未定义的”。这可能会产 阅读全文
posted @ 2013-05-26 17:31 Jerry19880126 阅读(698) 评论(0) 推荐(0) 编辑
摘要:先放上自己写的MySharedPtr类,这是仿照shared_ptr的功能来实现的(实际shared_ptr要复杂的多)。 1 #ifndef MY_SHARED_PTR_H 2 #define MY_SHARED_PTR_H 3 4 #include <iostream> 5 using namespace std; 6 7 8 typedef void (*FP)(); 9 10 template <class T>11 class MySharedPtr12 {13 14 private:15 T *ptr;16 size_t *count;17 F... 阅读全文
posted @ 2013-05-26 17:03 Jerry19880126 阅读(594) 评论(0) 推荐(0) 编辑
摘要:条款十四:在资源管理类中小心copying行为首先来看一个例子: 1 #include <iostream> 2 using namespace std; 3 4 class Lock 5 { 6 public: 7 explicit Lock(int* pm): m_p(pm) 8 { 9 lock(m_p);10 }11 12 ~Lock()13 {14 unlock(m_p);15 }16 17 private:18 int *m_p;19 void lock(int* pm)20 ... 阅读全文
posted @ 2013-05-25 15:58 Jerry19880126 阅读(1076) 评论(0) 推荐(0) 编辑
摘要:从这个条款开始,就进入到资源管理部分了。资源管理往往是大型项目的一个难点,也是重中之重,看到一些编程规范,都是将资源管理的规范列为高优先级的重点。管理资源的最好方法其实是预防,而好的预防方法就是尽量不去使用C/C++的原生指针,这些指针像幽灵一样,一个“忘记”,就是一个隐患。当项目小的时候,这些隐患看不出来,但当研发一个拥有上万级用户的产品时,服务器对很多人同时运行含有隐患的代码,这个隐患就会爆发,导致内存不足而崩溃。举个例子,初学者常常这样写:1 int *p = new int();2 …3 delete p;这个当然是OK的,内存可以回收,但万一中间的过程超过数十行,你还能记住去dele 阅读全文
posted @ 2013-05-19 09:03 Jerry19880126 阅读(865) 评论(0) 推荐(0) 编辑