C++0x smart_ptr

C++0x smart_ptr
GCC4.3 开始了c++0x的实现 新的基本库和语言特性
下面是我对于shared_ptr的理解所写的sample同时还用到了Variadic templates
#include  < c ++ 0x_warning.h >
#include 
< tr1 / array >
#include 
< tr1 / tuple >
#include 
< tr1 / memory >
#include 
< tr1 / functional >
#include 
< string >
#include 
< iostream >
#include 
< typeinfo >

using namespace std;
using namespace tr1;

typedef std::tr1::shared_ptr
< char >  char_p;
typedef std::tr1::shared_ptr
< wchar_t >  wchar_tp;
typedef std::tr1::shared_ptr
< short >  short_p;
typedef std::tr1::shared_ptr
< int >  int_p;
typedef std::tr1::shared_ptr
< long >  long_p;
typedef std::tr1::shared_ptr
< float >  float_p;
typedef std::tr1::shared_ptr
< double >  double_p;

class  sample :  public  std::tr1::enable_shared_from_this < sample >  {
private :
    std::string m_value;
protected :
    typedef std::tr1::enable_shared_from_this
< sample >  base;

public :
    
    
void  setValue( const  std::string &  o){m_value = o;}
    std::string getValue(){
return  m_value;}
    sample() {
    }
    sample(
const  sample &  other) :
        base(other) {
        m_value
= other.m_value;
    }
    sample(std::string s):m_value(s){}
    sample(
const   char *  buff,size_t len):m_value(buff,len){}
    sample
&  operator  = ( const  sample &  other) {
        base::operator 
= (other);  //  explicit call to assignment operator
        m_value = other.m_value;
        
return   * this ;
    }

};
typedef std::tr1::shared_ptr
< sample >  sample_p;

template
< typename T,typename Args >
std::tr1::shared_ptr
< T >  New(Args args) {
return  std::tr1::shared_ptr < T > ( new  T(args));
}

int  main( int  argc,  char   ** argv) {

    int_p ip1
= New < int > ( 10 );
    int_p ip2
= New < int > ();
    int_p ip3
= New < int > ( * ip1);
    long_p ipl1
= New < long > ();
    cout
<< " ip1: " <<* ip1 << ' \n ' ;
    cout
<< " ip2: " <<* ip2 << ' \n ' ;
    cout
<< " ip3: " <<* ip3 << ' \n ' ;
    
    std::string s
= " Welcome C++0x! " ;
    sample_p sp1
= New < sample > ();
    cout
<< " This is sp1  " << sp1 -> getValue() << ' \n ' ;
    
    sample_p sp2
= New < sample > ( " This is sp2 " );
    cout
<< " This is sp2  " << sp2 -> getValue() << ' \n ' ;
    
    sample_p sp3
= New < sample > (s.c_str(),s.size());
    sample_p sp4
= New < sample > ( * sp3);
    sample_p sp5(sp3);
    
    sp3
-> setValue( " Now it is sp3 " );
    
    cout
<< " This is sp3  " << sp3 -> getValue() << ' \n ' ;
    cout
<< " This is sp4  " << sp4 -> getValue() << ' \n ' ;
    cout
<< " This is sp5  " << sp5 -> getValue() << ' \n ' ;
    

    
return   0 ;
}


你可能感兴趣的:(C++0x smart_ptr)