29 // 构造空指针.
30 explicit smart_ptr () : p(NULL), u(NULL)
31 {}
32
33 // 智能指针析构.
34 ~smart_ptr (void)
35 {
36 // 如果引用计数等于0, 则删除数据和引用计数, 并置p为NULL.
37 // 此处需要注意的是, 共用的u并未置为 NULL, 在其它指针析构
38 // 时, p为NULL, 则不会重复delete.
39 if (p && u->release() <= 0)
40 {
41 delete p;
42 delete u;
43 p = NULL;
44 }
45 }
46
47 // 智能指针拷贝构造函数.
48 smart_ptr (const smart_ptr& t)
49 {
50 p = t.p;
51 u = t.u;
52
53 if (u) // 必须判断空值.
54 {
55 u->addref(); // 增加引用计数.
56 }
57 }
58
59 // 指针赋值.
60 void operator= (smart_ptr& t)
61 {
62 // 首先将引用计数减1, 然后再判断是否小于0, 如果小于0, 则delete.
63 if (p && u->release() <= 0)
① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;
② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。