扩展的RAII??
假设有下面的类
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》
资源的名字,还可以做为参数传递进去。其余的暂时没思考太多,不知道能否完成我想要的。