boost 学习教程之练习【章节1~2-智能指针】

这段时间我突然对C++ boost有了兴趣
学习教程网站:http://zh.highscore.de/cpp/boost/
它的每个章节后面都有练习,用以强化你在这章学到的知识,但想看这些练习的答案是要花钱买的,所以自己做个笔记,用以让别人对照,如发现我里面的错误,请回复告之,不胜感激。

第一章: 简介(无)

第二章: 智能指针

练习1

使用适当的智能指针优化下面的程序:

#include <iostream> 
#include <cstring> 

char *get(const char *s) 
{ 
  int size = std::strlen(s); 
  char *text = new char[size + 1]; 
  std::strncpy(text, s, size + 1); 
  return text; 
} 

void print(char *text) 
{ 
  std::cout << text << std::endl; 
} 

int main(int argc, char *argv[]) 
{ 
  if (argc < 2) 
  { 
    std::cerr << argv[0] << " <data>" << std::endl; 
    return 1; 
  } 

  char *text = get(argv[1]); 
  print(text); 
  delete[] text; 
} 
尝试改善:
#include <iostream> 
#include <cstring> 
#include <boost/shared_array.hpp>

boost::shared_array<char> get(const char *s) 
{ 
  size_t size = std::strlen(s); 
  boost::shared_array<char> text(new char[size + 1]); 
  std::strncpy(text.get(), s, size + 1); 
  return text; 
} 

void print(boost::shared_array<char> text) 
{ 
  std::cout << text.get() << std::endl; 
} 

int main(int argc, char *argv[]) 
{ 
  if (argc < 2) 
  { 
    std::cerr << argv[0] << " <data>" << std::endl; 
    return 1; 
  } 

  boost::shared_array<char> text = get(argv[1]); 
  print(text); 
} 
练习2

优化下面的程序:

#include <vector> 

template <typename T> 
T *create() 
{ 
  return new T; 
} 

int main() 
{ 
  std::vector<int*> v; 
  v.push_back(create<int>()); 
} 
尝试改善:
#include <boost/ptr_container/ptr_vector.hpp> 

template <typename T> 
T *create() 
{ 
  return new T; 
} 

int main() 
{ 
  boost::ptr_vector<int> v; 
  v.push_back(create<int>()); 
} 

猜你喜欢

转载自blog.csdn.net/u010921682/article/details/80183897