EffectiveC++学习笔记-条款15|16|17
2017-06-23 11:53
316 查看
条款15 在资源管理类中提供对原始资源的访问
条款16 成对使用new和delete
条款17 使用独立语句将new的对象放入智能指针
尽量不使用隐式转换。
显然会有99个string不太可能被正常删除。
应该使用
不过最好使用STL提供的容器
假如如下使用
这个函数执行的步骤如下:
调用priority
执行new Widget
调用shared_ptr构造函数
其中调用priority应该是不同编译器有不同选择。
假如这样执行
执行new Widget
调用priority
调用shared_ptr构造函数
但是假如priority抛出异常,new Widget返回的指针可能就丢失。
内存泄露。
所以安全的做法是:
条款16 成对使用new和delete
条款17 使用独立语句将new的对象放入智能指针
在资源管理类中提供对原始资源的访问
提供get方法返回原始指针obj.get();
尽量不使用隐式转换。
成对使用new和delete
std::string* strArr = new std::string[100]; ... delete strArr;
显然会有99个string不太可能被正常删除。
应该使用
delete [] strArr;
不过最好使用STL提供的容器
使用独立语句将new的对象放入智能指针
例如一个需要处理程序优先权的函数。int priority(); void processWidget(shared_ptr<Widget> pw, int priority);
假如如下使用
processWidget(shared_ptr<Widget>(new Widget), priority());
这个函数执行的步骤如下:
调用priority
执行new Widget
调用shared_ptr构造函数
其中调用priority应该是不同编译器有不同选择。
假如这样执行
执行new Widget
调用priority
调用shared_ptr构造函数
但是假如priority抛出异常,new Widget返回的指针可能就丢失。
内存泄露。
所以安全的做法是:
shared_ptr<Widget> pw(new Widget); processWidget(pw, priority())
相关文章推荐
- EffectiveC++学习笔记-条款20|21
- EffectiveC++学习笔记-条款9
- EffectiveC++学习笔记-条款34|35
- EffectiveC++学习笔记-条款45
- 快学Scala学习笔记及习题解答(15-16注解与XML处理)
- EffectiveC++学习笔记-条款22|23
- EffectiveC++学习笔记-条款36|37
- EffectiveC++学习笔记-条款26|27
- Effective C++条款15、16、17
- EffectiveC++学习笔记-条款7
- EffectiveC++学习笔记-条款14
- Effective c++ 条款16学习笔记: 成对使用new和delete时要采取相同形式
- EffectiveC++学习笔记-条款11
- EffectiveC++学习笔记-条款38
- EffectiveC++学习笔记-条款8
- 从java到安卓学习笔记--到15-06-16
- EffectiveC++学习笔记-条款18|19
- EffectiveC++学习笔记-条款46
- EffectiveC++学习笔记-条款41|42
- EffectiveC++学习笔记-条款32|33