随笔 - 67  文章 - 79  trackbacks - 0
<2008年5月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

常用链接

留言簿(1)

随笔档案

文章档案

相册

搜索

  •  

最新评论

阅读排行榜

评论排行榜

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;
}


posted on 2008-05-22 16:05 zarra 阅读(204) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: