容器内指针的new和delete
来源:互联网 发布:瑞士军刀软件怎么用 编辑:程序博客网 时间:2024/05/06 11:24
转载:http://www.cppblog.com/zmllegtui/archive/2008/10/28/65380.html
容器在STL中被认为是智能的。它们支持向前和向后的迭代器;它们能告诉你它所保存的对象类型(通过typedef value_type);在插入和删除过程中它们进行了良好的内存管理;它们将报告自己包含了多少对象和自己最多能包含多少对象(分别通过size和max_size取得);并且,当容器销毁时,它自动销毁每个被包含的对象。
void doSomething()
{
vector<Widget*> vwp;
for (int i = 0; i < SOME_MAGIC_NUMBER; ++i)
vwp.push_back(new Widget);
… // use vwp
} //Widgets are leaked here!
void doSomething()
{
vector<Widget*> vwp;
… // as before
for (vector<Widget*>::iterator i = vwp.begin();i != vwp.end(),++i) {
delete *i;
}
}
template<typename T>
struct DeleteObject:
public unary_function<const T*, void> { //this inheritance is here
void operator()(const T* ptr) const
delete ptr;
}
};
void doSomething()
{
… // as before
for_each(vwp.begin(), vwp.end(), DeleteObject<Widget>);
}
class SpecialString: public string { ...};
void doSomething()
{
deque<SpecialString*> dssp;
…
for_each( dssp.begin(), dssp.end(), // undefined behavior! Deletion
DeleteObject<string>()); //of a derived object via a base
} // class pointer where there is
//no virtual destructor
struct DeleteObject { // templatization and base
// class removed here
template<typename T> II templatization added here
void operator()(const T* ptr) const
{
delete ptr;
}
}
void doSomething()
{
deque<SpecialString*> dssp;
…
for_each( dssp.begin(), dssp.end(),
DeleteObject ()); // ah! well-defined behavior!
}
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*, then do a
//push_back on it
…
}
// even if an exception is thrown
//in the code above
- 容器内指针的new和delete
- C++中指针的new和delete
- 二维指针的new和delete
- 指针⑶,new和delete
- new和delete,以及指针
- 条款7.使用包含由new产生的指针容器时,切记在容器销毁前delete指针
- 如果容器中包含了通过new操作创建的指针,切记在容器对象析构前将指针delete掉
- 条款7:当使用new得指针的容器时,记得在销毁容器前delete那些指针
- 若容器中包含了new创建的指针,一定要在析构前delete掉
- C++(1) 指针 new 和delete
- new和delete 基类指针指向继承类的对象时,delete的过程
- New和delete的原理
- New和delete的原理
- new和delete的使用
- new和delete的使用
- new和delete的应用
- new 和delete的实现
- C++的new和delete
- 【Android】【录音】Android录音--AudioRecord、MediaRecorder
- Knockout应用开发指南
- 初探 iOS8 中的 Size Class
- 了解AsyncTask异步任务
- ubuntu上mysql的一些注意点
- 容器内指针的new和delete
- 人力资源成熟度模型
- 【安卓】Content Provider 基础
- 几个vi命令
- Maven 学习
- android-async-http AsyncHttpClient介绍
- SPFA单源最短路径
- The Complete Guide to UML Diagram Types with Examples/ UML 图类型以及样例
- Android中当数据库需要更新时我们该怎么办?