我试图用RAII模式重新考虑一些旧代码。旧代码管理资源分配,但期望用户显式锁定/解锁资源。例如,像这样的东西(只是一个例子,而不是真正的代码):
void modify(int id){
lock();
modify_data_related_to_id(id);
unlock();
}
会变成这样:
void modify(int id){
RAIIOBJ obj;
modify_data_related_to_id(id);
}
好处是您不必记住unlock
对象。删除RAIIOBJ
后,将在析构函数中自动调用unlock。
问题是,有大量的地方需要重新考虑。我以为我会使用宏并用RAII调用替换lock
调用,而unlock
将成为无操作函数,如:
#define lock() RAIIOBJ obj;
void unlock(){ //empty function
}
这样我就不必改变调用锁定/解锁的每个地方来使用RAII方法。但是,有没有更好的方法 - 也许只有一种问题的模式 - 这样做,而不是使用宏。