摘要:
举书上的例子: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 阅读全文
摘要:
这个条款比较好理解,就是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环境),这些行为是“未定义的”。这可能会产 阅读全文
摘要:
先放上自己写的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... 阅读全文