免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: hh942111
打印 上一主题 下一主题

请教一个STL的问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2004-04-22 01:16 |只看该作者

请教一个STL的问题

我的本意是对一个很大的类,比如Test,在与STL结合时希望避免拷贝对象的开销。由于auto_ptr不能配合STL使用,所以考虑效率和使用STL容器,我希望实现自己的智能指针提供这样的功能,这里可以提供实现思路(当然真正的实现还需要考虑更多的东西)
  1. class Smart_ptr
  2. {
  3. private:
  4.     // 计数器
  5.     // CAtomicCounter对象管理计数值,其AtomicIncrement递增计数值
  6.     // AtomicDecrement递减计数值并且在其值为0时返回true
  7.     // 在CAtomicCounter内部可以实现多线程的保护
  8.     mutable CAtomicCounter* m_pCount;
  9.     // 保存的对象指针
  10.     Test *m_pData;

  11. public:
  12.         Smart_ptr( Test *p )
  13.         : m_pData( p )
  14.         {
  15.         m_pCount = new CAtomicCounter( 1 );
  16.         }
  17.                
  18.     Smart_ptr(const Smart_ptr& rhs)
  19.     : m_pData(rhs.m_pData)
  20.     {
  21.             m_pCount->;AtomicIncrement();
  22.     }

  23.         ~Smart_ptr()
  24.         {
  25.                 if( m_pCount->;AtomicDecrement() )
  26.         {
  27.             delete m_pCount;
  28.                     m_pCount = NULL;
  29.                     delete m_pData;
  30.         }
  31.     }
  32. }
复制代码

论坛徽章:
0
12 [报告]
发表于 2004-04-22 01:19 |只看该作者

请教一个STL的问题

上面的拷贝构造函数漏了东西,应该如下
  1.     Smart_ptr(const Smart_ptr& rhs)
  2.     : m_pData(rhs.m_pData),
  3.     m_pCount(rhs.m_pCount)
  4.     {
  5.             m_pCount->;AtomicIncrement();
  6.     }
复制代码

论坛徽章:
0
13 [报告]
发表于 2004-04-22 07:15 |只看该作者

请教一个STL的问题

这里有一些Smart Pointers的讨论,你可以看看
http://ootips.org/yonat/4dev/
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP