这是对为什么 Alexandrescu 不能使用 std::uncaught_exception() 在 ScopeGuard11 中实现 SCOPE_FAIL 的一种跟进?
我想检测是否有人MyClass
在另一个类的析构函数中创建(或在调用堆栈中的某处使用活动的析构函数)。
class MyClass
{
public:
MyClass(){
assert(???what to put here????);
}
}
void f(){
MyClass m; //whether this asserts should be context dependant
}
class OtherClass{
~OtherClass(){
MyClass m; //this should assert
f(); //this should too;
}
}
int main()
{
MyClass m; //this should not assert
f(); //this should also not assert
}
一种尝试可能是:
assert(!std::uncaught_exception());
但这仅在由于异常而调用析构函数时才有效,而不是因为对象超出范围而被调用时才有效。