Chinaunix首页 | 论坛 | 博客
  • 博客访问: 581623
  • 博文数量: 104
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1559
  • 用 户 组: 普通用户
  • 注册时间: 2014-08-21 00:58
个人简介

锻炼精神,首先要锻炼肉体

文章分类

全部博文(104)

文章存档

2018年(1)

2016年(1)

2015年(101)

2014年(1)

我的朋友

分类: C/C++

2015-05-08 16:18:52

最近看的风格和自己熟悉的有很多不同,所以从一个比较冗长的项目代码中抽取出一小段代码进行分析与实现,自己也学习一下这种编码的风格。

就是 boost 中的 scoped_ptr 指针用在模板编程中,以及对使用 boost::scoped_ptr 指针的类对象的构造方法中,
通过构造方法中的参数来通过scoped_ptr 创建特化的对象的测试代码。

   特点1: 构造方法后面的默认赋值竟然使用 new 来创建对象,而并不是在构造方法中直接进行赋值
  特点2: 对 boost::scoped_ptr 的封装
  
可能是从来没有接触过模板编程的原因,所以 boost 中的很多使用方法对我来说很新鲜

编程环境: vs2010

// scoped_ptr.hpp

点击(此处)折叠或打开

  1. #ifndef SCOPED_PTR_HPP__
  2. #define SCOPED_PTR_HPP__

  3. #include <boost/scoped_ptr.hpp>

  4. template <typename T>
  5. class ScopedPtr
  6. {
  7. public :
  8.     typedef boost::scoped_ptr<T> Type
  9. } ;
  10. #endif
// NodeManager.hpp

点击(此处)折叠或打开

  1. #ifndef NODE_MANAGER_HPP__
  2. #define NODE_MANAGER_HPP__

  3. #include "scoped_ptr.hpp"

  4. #include <string>

  5. class NodeManager
  6. {
  7. public :
  8.     NodeManager ( std::string &name ) ;
  9.     ~NodeManager() ;
  10. private :
  11.     struct node ; // only declaration
  12.     ScopedPtr<node>::Type nodePtr ; // 这里的 nodePtr 是一个类型,
  13.                                     // 等同于 typdef boost::scoped_ptr nodePtr
  14. } ;

  15. #endif
// NodeManager.cpp

点击(此处)折叠或打开

  1. #include "NodeManager.hpp"

  2. #include <iostream>
  3. #include <string>
  4. #include <cstdio>

  5. using namespace std ;

  6. // definition of node
  7. struct NodeManager::node
  8. {
  9.     node ():node_name (NULL)
  10.     {}
  11.     node ( string & name ) :node_name(name)
  12.     {}
  13.     ~node ()
  14.      {
  15.         cout << "release node " <
  16.      }
  17.     string node_name ;
  18. } ;

  19. NodeManager::NodeManager( string &name ) :nodePtr( new node( name ))-----> 此处可以被
  20. {                                                   scoped_ptr nodePtr( new node (node)) ;
  21.     cout << " name of the node " << endl ;                        所替代
  22.     cout << nodePtr->node_name << endl ;
  23. }
  24. NodeManager::~NodeManager ()
  25. {
  26.    cout <<"release NodeManager " << endl ;
  27. }
  28. int main ( int argc , char **argv )
  29. {
  30.     string name = "Rurutia" ;
  31.     
  32.      NodeManager nodeManager(name ) ;

  33.      system("pause") ;
  34.      return 0 ;
  35. }
end
阅读(1118) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~