扩展的RAII??

J2eeLearner 2004-07-15 08:32:15
假设有下面的类
class Resources {
private:
resource1,resource2,resource3 ...;
}
每一个资源的申请都有可能出错,那整个对象就构造失败。因此在构造函数里面总是需要在错处出现的情况下把已经申请的资源释放。
同样在,函数中也会出现这问题。

因此,我想做一个“扩展的RAII”,可以完整的负责一切资源的申请,当某一个失败时,可以统一释放,类似于“事务”的概念。
每个资源可以象平常一样事先 定义好自己的申请/释放方法。
class Resource {
public:
abstract void requireResource() =0;
abstract void releaseResource()
String resourceName;
}

class Resource1 public Resource {
public:
void Resource(String resourceName ...) {
this.resourceName = resourceName;
}
void requireResource() {...}
void releaseResource() {....}
}


template <TypeList>
class RAIIResouces{
public:
flag success=true;
Vector<pair<String,Resource>> resourceList;
public:
RAIIResoucesConstructor() {

for(int i=0;i<TypeList.length(), i++)
{
Resource resource =TypeList.getType(i);
resource.requeireResource();
if (OK)
resourceList.push(resource.resourceName,resource)
else
success=false;
}
}
Descructor(
for(int i=0;i<resourceList.length(), i++)
{
Resource resource =resourceList.getType(i);
resource.releaseResource();
)
}

使用:
class Resources: public RAIIResouces<T1,T2,T3....>
{

}

差不多了,至于TypeList可以参考《Moreder C++ design》
资源的名字,还可以做为参数传递进去。其余的暂时没思考太多,不知道能否完成我想要的。

...全文
92 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
BluntBlade 2004-07-16
  • 打赏
  • 举报
回复
寒一个。帮顶,有空可以考虑一下。
J2eeLearner 2004-07-15
  • 打赏
  • 举报
回复
偶也不知道是啥写的,没上IDE,没人提醒我用啥语言,只要能看的懂就好 :)
freefalcon 2004-07-15
  • 打赏
  • 举报
回复
ft,废人怎么钻到我前面去了
freefalcon 2004-07-15
  • 打赏
  • 举报
回复
楼主贴的是java代码?
Wolf0403 2004-07-15
  • 打赏
  • 举报
回复
楼主的代码是 Java++ ……
J2eeLearner 2004-07-15
  • 打赏
  • 举报
回复
忘了怎么从它里面获取资源了。 可以用那个resourceName :)相当于一个字典

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧