#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;
}
ptr_vector
最新推荐文章于 2022-04-14 13:52:20 发布