最近看的风格和自己熟悉的有很多不同,所以从一个比较冗长的项目代码中抽取出一小段代码进行分析与实现,自己也学习一下这种编码的风格。
就是 boost 中的 scoped_ptr 指针用在模板编程中,以及对使用 boost::scoped_ptr 指针的类对象的构造方法中,
通过构造方法中的参数来通过scoped_ptr 创建特化的对象的测试代码。
特点1: 构造方法后面的默认赋值竟然使用 new 来创建对象,而并不是在构造方法中直接进行赋值
特点2: 对 boost::scoped_ptr 的封装
可能是从来没有接触过模板编程的原因,所以 boost 中的很多使用方法对我来说很新鲜
编程环境: vs2010
// scoped_ptr.hpp
-
#ifndef SCOPED_PTR_HPP__
-
#define SCOPED_PTR_HPP__
-
-
#include <boost/scoped_ptr.hpp>
-
-
template <typename T>
-
class ScopedPtr
-
{
-
public :
-
typedef boost::scoped_ptr<T> Type ;
-
} ;
-
#endif
// NodeManager.hpp
-
#ifndef NODE_MANAGER_HPP__
-
#define NODE_MANAGER_HPP__
-
-
#include "scoped_ptr.hpp"
-
-
#include <string>
-
-
class NodeManager
-
{
-
public :
-
NodeManager ( std::string &name ) ;
-
~NodeManager() ;
-
private :
-
struct node ; // only declaration
-
ScopedPtr<node>::Type nodePtr ; // 这里的 nodePtr 是一个类型,
-
// 等同于 typdef boost::scoped_ptr nodePtr
-
} ;
-
-
#endif
// NodeManager.cpp
-
#include "NodeManager.hpp"
-
-
#include <iostream>
-
#include <string>
-
#include <cstdio>
-
-
using namespace std ;
-
-
// definition of node
-
struct NodeManager::node
-
{
-
node ():node_name (NULL)
-
{}
-
node ( string & name ) :node_name(name)
-
{}
-
~node ()
-
{
-
cout << "release node " <
-
}
-
string node_name ;
-
} ;
-
-
NodeManager::NodeManager( string &name ) :nodePtr( new node( name ))-----> 此处可以被
-
{ scoped_ptr nodePtr( new node (node)) ;
-
cout << " name of the node " << endl ; 所替代
-
cout << nodePtr->node_name << endl ;
-
}
-
NodeManager::~NodeManager ()
-
{
-
cout <<"release NodeManager " << endl ;
-
}
-
int main ( int argc , char **argv )
-
{
-
string name = "Rurutia" ;
-
-
NodeManager nodeManager(name ) ;
-
-
system("pause") ;
-
return 0 ;
-
}
end
阅读(1118) | 评论(0) | 转发(0) |