【15】在资源管理类中提供对原始资源的访问
2014-01-09 19:56
113 查看
1、为什么要这样做?
因为有的接口需要原始资源,比如方法void DoSth(const Person* p); 而现在我有一个shared_ptr<Person> person_ptr; 调用DoSth(person_ptr)编译失败,因为方法要一个Person指针,而person_ptr是一个对象。那怎么办?只能让资源管理类暴露资源。
2、怎么暴露呢?两种办法:一种是提供显式方法,一种是隐式类型转换操作符:operator Person* () const ; 好像是一种特殊的方法:没有返回值,没有形参,重载了返回值的类型。根据准则:让接口容易被正确使用,不易被误用。应该使用显式方法,因为显式方法明确告诉用户,获取了内部资源。
3、还要注意,资源管理类暴露了内部资源,有可能会出现这种情况:资源管理类离开作用域,销毁了资源,而外部有指针指向资源管理类中的内部资源,还在使用,导致未定义行为。
因为有的接口需要原始资源,比如方法void DoSth(const Person* p); 而现在我有一个shared_ptr<Person> person_ptr; 调用DoSth(person_ptr)编译失败,因为方法要一个Person指针,而person_ptr是一个对象。那怎么办?只能让资源管理类暴露资源。
2、怎么暴露呢?两种办法:一种是提供显式方法,一种是隐式类型转换操作符:operator Person* () const ; 好像是一种特殊的方法:没有返回值,没有形参,重载了返回值的类型。根据准则:让接口容易被正确使用,不易被误用。应该使用显式方法,因为显式方法明确告诉用户,获取了内部资源。
3、还要注意,资源管理类暴露了内部资源,有可能会出现这种情况:资源管理类离开作用域,销毁了资源,而外部有指针指向资源管理类中的内部资源,还在使用,导致未定义行为。
相关文章推荐
- Effective C++(15) 在资源管理类中提供对原始资源的访问
- 条款15:在资源管理类中提供对原始资源的访问(Provide access to raw resources in resource-managing classes)
- Effective C++ 学记之15 在资源管理类中提供对原始资源的访问
- Effective C++ 条款15 在资源管理类中提供对资源的原始访问
- 条款15: 在资源管理类中提供对原始资源的访问
- Effective C++ 条款15:在资源管理类中提供对原始资源的访问
- Effective C++ -----条款15:在资源管理类中提供对原始资源的访问
- 条款15:在资源管理类中提供对原始资源的访问
- 条款15: 在资源管理类中提供对原始资源的访问
- 条款15 在资源管理类中提供对原始资源的访问
- C++之在资源管理类中提供对原始资源的访问(15)---《Effective C++》
- 【Effective c++】条款15:在资源管理类中提供对原始资源的访问
- effective C++ 条款 15:在资源管理类中提供对原始资源的访问
- 条款15:在资源管理类中提供对原始资源的访问
- Effective C++ 条款15、16 在资源管理类中提供对原始资源的访问||成对使用new 与 delete要采取相同形式
- Item 15:资源管理类需要提供对原始资源的访问 Effective C++笔记
- 条款15:在资源管理类中提供对原始资源的访问
- Effective C++ Item 15 在资源管理类中提供对原始资源的访问
- effective c++ 条款15 在资源管理类中提供对原始资源的访问
- 条款15、在资源管理类中提供对原始资源的访问