您的位置:首页 > 其它

【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、还要注意,资源管理类暴露了内部资源,有可能会出现这种情况:资源管理类离开作用域,销毁了资源,而外部有指针指向资源管理类中的内部资源,还在使用,导致未定义行为。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐