Bu Birisi başka bir sınıfın yıkıcı MyClass
oluşturuyorsa bu algılamak istiyorum Why can't Alexandrescu use std::uncaught_exception() to implement SCOPE_FAIL in ScopeGuard11?Başka bir yıkıcıyı yürütürken bir nesnenin oluşturulup oluşturulmadığını tespit etmek için herhangi bir numara var mı?
takip tür olan (ya da bir yere çağrı yığını içinde aktif yıkıcının birlikte).
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
}
bir teşebbüs olabilir:
assert(!std::uncaught_exception());
ama yıkıcı özel durum nedeniyle çağrılan olup olmadığını sadece nesne kapsam dışına çıktı çünkü çağrıldığında değilse çalışacak.
Bu yıkıcıları, icralarını herhangi bir şekilde işaret etmek için açıkça tasarlamadıkça, bunun mümkün olduğundan şüpheliyim. Genel olarak, işlevinizin nerede çağrıldığını söyleyemezsiniz. –
Çözümün ne kadar taşınabilir olmasını istiyorsunuz? – Flexo
Çözümünüzü belirli bir derleyici sürümüyle özelleştirebilir ve 'OtherClass' nesnesini bulmak için yığını MyClass'ın yapıcısını inceleyebilirsiniz. Ben şahsen, bunun ne olduğu için çok fazla iş olduğunu düşünüyorum ... ve bir hata kaynağı olacak. – Synxis