设为首页 加入收藏

TOP

C++智能指针的学习体会
2011-12-24 22:54:56 】 浏览:2389
Tags:智能 指针 学习 体会

按照我的理解,智能指针简单的说就是一个用于管理成员指针的一个类。一般情况下,这个类都会重载箭头操作符(->)和解引用操作符(*)。在智能指针的类中会使用一个称为使用计数的技巧,也就是如果增加了一个对该类的成员的指针的拷贝,使用计数就增加一;相反,如果减少一个拷贝,使用计数就减少一。当使用计数为0的时候,就释放成员指针所指向的内存。

?在C++(www.cppentry.com) Primer中有一个简单的例子:

?1//辅助管理类
?2class?U_Ptr
?3{
?4????friend?class?HasPtr;
?5????int?*p;
?6????int?count;
?7????U_Ptr(int?*pn):p(pn),count(1){};
?8????~U_Ptr()
?9????{????
10????????delete?p;
11????}

12}
;
13
14//智能指针
15class?HasPtr
16{
17????U_Ptr?*ptr;
18public:
19????HasPtr(int?*p):ptr(new?U_Ptr(p)){}
20????~HasPtr()
21????{
22????????if(--ptr->count?==?0)?
23????????????delete?ptr;
24????}

25????HasPtr(const?HasPtr?&otherHasPtr):ptr(otherHasPtr.ptr)
26????{
27????????++ptr->count;????????
28????}

29????HasPtr?&operator=(const?HasPtr?&otherHasPtr)
30????{
31????????if(--ptr->count?==?0)
32????????????delete?ptr;
33????????ptr?=?otherHasPtr.ptr;
34????????++ptr->count;
35????????return?*this;
36????}

37????//对于整型指针重载->没有意义
38????//int?*operator->()
39????//{
40????//????return?ptr->p;
41????//}
42????int?&operator*()
43????{
44????????return?*(ptr->p);
45????}

46}
;

yabo体育app下载开发网
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇谈谈 C++ 的引用 下一篇浅谈C++的智能指针

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

array(4) { ["type"]=> int(8) ["message"]=> string(24) "Undefined variable: jobs" ["file"]=> string(32) "/mnt/wp/cppentry/do/bencandy.php" ["line"]=> int(217) }