假设我有一个 RAII 风格的 C++ 类:
class StateSaver
{
public:
StateSaver(int i) { saveState(); }
~StateSaver() { restoreState(); }
};
...在我的代码中像这样使用:
void Manipulate()
{
StateSaver save(1);
// ...do stuff that modifies state
}
...目标是进入某个状态,做一些事情,然后在我离开那个范围时离开那个状态。有没有办法使这个错字不编译(或警告,或以某种方式抱怨以便注意到错误)?
void Manipulate()
{
StateSaver(1); // ruh-roh, state saved and immediately restored!
// ...do stuff that modifies state
}
我不知道 C++ 本身有什么东西可以用来防止这种情况发生,但这并不意味着它不存在。如果 C++ 中没有任何内容,则可以接受特定于编译器的扩展。我主要对任何针对 gcc 和 msvc 的东西感兴趣(有一天 icc,其他编译器的想法很受欢迎,但不太可能有用),因此对它们中的任何一个的 hack 都会很有用(当然,适当地抽象为 #ifdef'd 宏定义) .