ptr_vector

来源:互联网 发布:mock.js官网 编辑:程序博客网 时间:2024/06/03 20:58
<pre name="code" class="cpp">#ifndef __INCLUDE_PTR_VECTOR_H__#define __INCLUDE_PTR_VECTOR_H__#include <vector>#include <memory>using namespace std;template <typename T >class ptr_vector : public std::vector<T* >{    public:        ~ptr_vector()        {            clear();        }        void clear()        {            typename std::vector<T* >::iterator it;            for(it = this->begin();it != this->end(); ++it)            {                delete (*it);            }            std::vector<T* >::clear();        }        void push_back(T *const &  val)        {            std::auto_ptr<T> ptr(val);        //将val用auto_ptr接管所有权            std::vector<T*>::push_back(val); // operator new ; placement new             ptr.release();        }        void push_back(auto_ptr<T> &val)        {            std::vector<T*>::push_back(val.get());            val.release();        }};#endif //__INCLUDE_PTR_VECTOR_H__#include <iostream>#include <vector>#include "ptr_vector.h"using namespace std;class CTest{    public:        CTest()        {            cout<<"CTest()"<<endl;        }        CTest(const CTest &test)        {            cout<<"CTest(const CTest &test)"<<endl;        }        ~CTest()        {            cout<<"~CTest()..."<<endl;        }};int main(){    ptr_vector<CTest> vec;    CTest *t1 = new CTest;    CTest *t2 = new CTest;    CTest *t3 = new CTest;    vec.push_back(t1);    vec.push_back(t2);    vec.push_back(t3);    return 0;}


                                             
1 0
原创粉丝点击