auto_ptr q;
vector b;
auto_ptr 智能指针由于拷贝构造函数和赋值运行符不是Const参数, 所以不能直接作为vector的元素,也就不能调用b.push_back(a).
但是vector可以存放裸指针,就可以使用原生指针来实现 b.push_back(a.release());
由于容器中存放的是裸指针,要负责指针的释放,否则会内存泄露。而vector内部不负责指针所指向内存的管理,所以在vector销毁的时候,要手动释放容器内的元素所指向的内存,避免内存泄露。
vector push_back()时,此时己把裸指针交给vector管理,vector要申请4个字节的内存来保存指针,而申请内存有失败的风险(概率很小,确实存在),此时裸指针无法释放,造成内存泄露。
解决方案:
方案1: 容器内直接存放其它类型的智能指针,比如shared_ptr, scoped_ptr. 但此时仍要手动管理容器内元素所指向内存的释放。
方案2: 使用pre_vector. (后面总结)。