基本上我想要的是与std::call_once相反的,我需要一些代码,例如在函数foo
内部,只在foo的最后调用时运行,最好没有某种惰性调用机制。
void foo()
{
...
if( magic )
do stuff
}
foo();
foo();
foo(); // magic will only be true here
这样的事情可能吗?
这个魔法就是魔法,在这个世界上是不可能的。
然而,我猜,你的问题是如何做所需的清理,这是可能的。我能想到的至少有三种不同的机制:
-
向
atexit()
注册一个清理处理程序 -
用
__attribute__((destructor))
定义函数 -
把你的清理放到类的析构函数中,并创建该类的静态对象
不,不可能。确定没有人会再次调用foo
的唯一方法是a)解决停止问题b)在程序终止时调用foo。