包含指针的容器delete方式
2016-12-12 15:08
176 查看
如何正确处理包含指针的容器是值得探究的。
一、常见的方式,直接手动delete
void doSomething()
{
vector<Widget*> vwp;
for (int i = 0; i < SOME_MAGIC_NUMBER; ++i)
vwp.push_back(new Widget);
...
for (vector<Widget*>::iterator i = vwp.begin();i != vwp.end(),++i) {
delete *i;
}
}
二、使用 函数对象+模板的技巧
struct DeleteObject {
// 删除这里的
// 模板化和基类
template<typename T>
// 模板化加在这里
void operator()(const T* ptr) const {
delete ptr;
}
}
void doSomething()
{
deque<SpecialString*> dssp;
...
for_each(dssp.begin(), dssp.end(),DeleteObject()); // 啊!良好定义的行为!
} //但不是异常安全的
三、 利用Boost的shared_ptr
void doSomething()
{
typedef boost::shared_ ptr<Widget> SPW; //SPW = "shared_ptr to Widget"
vector<SPW> vwp;
for (int i = 0; i < SOME_MAGIC_NUMBER; ++i)
vwp.push_back(SPW(new Widget)); // 从一个Widget建立SPW,
// 然后进行一次push_back
... // 使用vwp
} // 这里没有Widget泄漏,甚至
// 在上面代码中抛出异常
一、常见的方式,直接手动delete
void doSomething()
{
vector<Widget*> vwp;
for (int i = 0; i < SOME_MAGIC_NUMBER; ++i)
vwp.push_back(new Widget);
...
for (vector<Widget*>::iterator i = vwp.begin();i != vwp.end(),++i) {
delete *i;
}
}
二、使用 函数对象+模板的技巧
struct DeleteObject {
// 删除这里的
// 模板化和基类
template<typename T>
// 模板化加在这里
void operator()(const T* ptr) const {
delete ptr;
}
}
void doSomething()
{
deque<SpecialString*> dssp;
...
for_each(dssp.begin(), dssp.end(),DeleteObject()); // 啊!良好定义的行为!
} //但不是异常安全的
三、 利用Boost的shared_ptr
void doSomething()
{
typedef boost::shared_ ptr<Widget> SPW; //SPW = "shared_ptr to Widget"
vector<SPW> vwp;
for (int i = 0; i < SOME_MAGIC_NUMBER; ++i)
vwp.push_back(SPW(new Widget)); // 从一个Widget建立SPW,
// 然后进行一次push_back
... // 使用vwp
} // 这里没有Widget泄漏,甚至
// 在上面代码中抛出异常
相关文章推荐
- 若容器中包含了new创建的指针,一定要在析构前delete掉
- 如果容器中包含了通过new操作创建的指针,切记在容器对象析构前将指针delete掉
- Effective STL 第7条:如果容器中包含了通过new操作创建的指针,切记在容器对象析构前将指针delete掉
- CArray 的两种方式与类中包含指针情况
- Effective STL 为包含指针的关联容器指定比较类型
- 一个包含指针数组的排序和使用函数指针来控制排序方式
- Effective STL 为包含指针的关联容器指定比较类型
- 为包含指针的关联容器指定比较类型
- 为包含指针的关联容器指定比较类型
- 为包含指针的关联容器指定比较类型
- 条款7:当使用new得指针的容器时,记得在销毁容器前delete那些指针
- 容器内指针的new和delete
- effective stl: 第20条,为包含指针的关联容器指定比较类型
- effective stl 第33条:对包含指针的容器使用remove这一类算法时要特别小心
- Effective STL 为包含指针的关联容器指定比较类型
- 对包含指针的容器使用remove要特别小心
- MFC框架各部分指针获取方式
- 经典指针的理解方式
- 指针⑶,new和delete
- MFC框架各部分指针获取方式