0
点赞
收藏
分享

微信扫一扫

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


举报

相关推荐

0 条评论