76 stl(四)

来源:互联网 发布:c语言课程设计题目 编辑:程序博客网 时间:2024/06/13 12:51
//ptr_vector.h#ifndef _PTR_VECTOR_H_#define _PTR_VECTOR_H_#include <vector>#include <memory>template <typename T>class ptr_vector :public std::vector<T*>{public:    ~ptr_vector()    {        clear();    }    void clear()    {        std::vector<T*>::iterator it;        for (it = begin(); it != end(); ++it)            delete *it;//释放指针指向的内存        std::vector<T*>::clear();//仅仅只释放指针变量本身    }    void push_back(T* const &val)    {        std::auto_ptr<T> ptr(val);       //将val用auto_ptr接管val所有权        std::vector<T*>::push_back(val);//operator new  placement new        ptr.release();//如果内存分配没有出现异常,ptr需要释放所有权    }};#endif//main.cpp#include<iostream>#include<memory>#include<vector>using namespace std;//#include"DebugNew.h"//#include "Node.h"#include "ptr_vector.h"class Test{public:    Test()    {        cout << "Test ..." << endl;    }    Test(const Test& other)    {        cout << "Copy Test ..." << endl;    }    ~Test()    {        cout << "~Test ..." << endl;    }};int main(void){    /*vector<Test*> v;    Test* t1 = new Test;    Test* t2 = new Test;    Test* t3 = new Test;    v.push_back(t1);    v.push_back(t2);    v.push_back(t3);*/    ptr_vector<Test> v;    Test* t1 = new Test;    Test* t2 = new Test;    Test* t3 = new Test;    v.push_back(t1);    v.push_back(t2);    v.push_back(t3);    return 0;}
0 0
原创粉丝点击