C++Primer学习:动态内存与智能指针(3)
2015-10-14 20:11
323 查看
[练习:]从文件中按行读入,放入一个StrBlob中,然后用一个StrBlobPtr打印出来.
//bool operator(const StrBlobPtr & p){return p.curr != curr;}; 在类内部重载了!= StrBlob record; ifstream in_file("text.txt"); string line; while (getline(in_file,line))//获取每一行 record.push_back(line); for (auto p = record.begin(), end = record.end(); p != end; p.incr()) cout << p.deref()<<endl; return 0; }
==========================================================
C++标准库提供了动态数组的管理:T* p =new T [],也提供了用unique_ptr来管理动态数组的办法.
[练习]将两个字符串常量连接后保存到一个动态数组里面.
auto p = new char[100](); strcat_s(p, 100, "aaaa"); strcat_s(p, 100, "bbbb"); cout << p; delete[] concatenate_string;
allocator类,new在灵活性上有一些局限性,因为它把分配内存和构造对象结合在一起.当我们分配较大的一块内存时,总是希望将内存分配与对象构建分离,这意味着我们可以分配大内存,但只有需要的时候才创建对象.allocator类定义在文件memory中,它分配的内存是原始的,未构造的。并且提供了一系列的操作来支持.
[练习]使用一个allocator类来读取n个字符串的输入并且输出后还原内存
int n = 5; allocator<string> a; auto const p = a.allocate(n); auto q = p; string s; while (cin >> s&&q != p + n) a.construct(q++, s); for (size_t i = 0; i != n; ++i) cout <<p[i]<<" "; while (q != p) a.destroy(--q); a.deallocate(p, n);
相关文章推荐