您的位置:首页 > 编程语言 > C语言/C++

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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: