隨筆 - 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 閱讀(210) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 曲阜市| 潼南县| 花垣县| 卢湾区| 万载县| 五台县| 资阳市| 长垣县| 报价| 曲水县| 泸州市| 育儿| 瓦房店市| 财经| 濮阳市| 日喀则市| 历史| 根河市| 任丘市| 托里县| 容城县| 衡水市| 中超| 水城县| 梧州市| 吉安县| 乌拉特前旗| 连云港市| 论坛| 炉霍县| 九江县| 佳木斯市| 健康| 玉树县| 尉氏县| 长武县| 禹城市| 凤冈县| 拜泉县| 乳山市| 六枝特区|