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

          常用鏈接

          留言簿(1)

          隨筆檔案

          文章檔案

          相冊

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          GCC4.3 開始了c++0x的實(shí)現(xiàn) 新的基本庫和語言特性
          下面是我對于shared_ptr的理解所寫的sample同時(shí)還用到了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)  編輯  收藏

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 宣化县| 宣汉县| 临沧市| 从江县| 土默特左旗| 囊谦县| 淮阳县| 宿州市| 宜良县| 永清县| 江华| 英山县| 景德镇市| 库车县| 邯郸市| 苍溪县| 大石桥市| 南江县| 新津县| 泗洪县| 平远县| 洛宁县| 化隆| 枣强县| 乐东| 武清区| 望奎县| 余江县| 扬州市| 伊宁市| 会理县| 武鸣县| 修武县| 庆安县| 安龙县| 淮安市| 宁河县| 明光市| 都江堰市| 内丘县| 贵溪市|