//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;
}
76 stl(四)
最新推荐文章于 2023-01-10 21:19:39 发布