<exception>
işlevleri
current_exception
Geçerli özel durum için bir akıllı işaretçi alır.
exception_ptr current_exception();
Dönüş Değeri
Geçerli özel duruma işaret eden bir exception_ptr nesnesi.
Açıklamalar
current_exception
bir catch bloğunda işlevini çağırın. Bir özel durum uçuştaysa ve catch bloğu özel durumu yakalayabilirse, current_exception
işlev özel duruma başvuran bir exception_ptr
nesne döndürür. Aksi takdirde işlev null exception_ptr
bir nesne döndürür.
İşlev, current_exception
deyiminin bir exception-declaration deyimi belirtip belirtmediğine bakılmaksızın, uçuşta catch
olan özel durumu yakalar.
Geçerli özel durumun yıkıcısı, özel durumu yeniden oluşturmuyorsanız bloğun catch
sonunda çağrılır. Ancak, yıkıcıda işlevini çağırsanız current_exception
bile, işlev geçerli özel duruma başvuran bir exception_ptr
nesne döndürür.
İşleve yapılan current_exception
ardışık çağrılar, geçerli özel durumun farklı kopyalarına başvuran nesneler döndürür exception_ptr
. Sonuç olarak, kopyalar aynı ikili değerde olsalar da farklı kopyalara başvurduklarından, nesneler eşit olmayarak karşılaştırılır.
make_exception_ptr
Özel durumun bir kopyasını tutan bir exception_ptr nesnesi oluşturur.
template <class E>
exception_ptr make_exception_ptr(E Except);
Parametreler
Hariç
Kopyalanacak özel duruma sahip sınıf. Genellikle işlev bağımsız değişkeni make_exception_ptr
olarak bir özel durum sınıf nesnesi belirtirsiniz, ancak herhangi bir sınıf nesnesi bağımsız değişken olabilir.
Dönüş Değeri
Dışında için geçerli özel durumun bir kopyasını işaret eden bir exception_ptr nesnesi.
Açıklamalar
işlevini çağırmakmake_exception_ptr
, bir C++ özel durumu oluşturmak, bir catch bloğunda yakalamak ve ardından özel duruma başvuran bir exception_ptr
nesne döndürmek için current_exception işlevini çağırmakla eşdeğerdir. İşlevin make_exception_ptr
Microsoft uygulaması, bir özel durum oluşturup yakalamaktan daha verimlidir.
Bir uygulama genellikle işlevi gerektirmez make_exception_ptr
ve kullanımını önerilmez.
rethrow_exception
Bir parametre olarak geçirilen bir özel durum oluşturur.
void rethrow_exception(exception_ptr P);
Parametreler
P
Yeniden oluşturulması için bir özel durum yakalandı. P null bir exception_ptr ise işlev std::bad_exception oluşturur.
Açıklamalar
Yakalanan bir özel durumu bir exception_ptr
nesnede depoladıktan sonra birincil iş parçacığı nesneyi işleyebilir. Birincil iş parçacığınızda işlevi bağımsız değişkeni olarak nesnesiyle exception_ptr
birlikte çağırınrethrow_exception
. işlevi nesneden rethrow_exception
exception_ptr
özel durumu ayıklar ve ardından özel durumu birincil iş parçacığı bağlamında oluşturur.
get_terminate
Geçerli terminate_handler
işlevi alır.
terminate_handler get_terminate();
set_terminate
Programın sonlandırılması sırasında çağrılacak yeni terminate_handler
bir oluşturur.
terminate_handler set_terminate(terminate_handler fnew) throw();
Parametreler
yeni
Sonlandırma sırasında çağrılacak işlev.
Dönüş Değeri
Sonlandırma sırasında çağrılmak için kullanılan önceki işlevin adresi.
Açıklamalar
İşlev, * fnew işlevi olarak yeni bir terminate_handler oluşturur. Bu nedenle, fnew null işaretçisi olmamalıdır. işlevi, önceki sonlandırma işleyicisinin adresini döndürür.
Örnek
// exception_set_terminate.cpp
// compile with: /EHsc
#include <exception>
#include <iostream>
using namespace std;
void termfunction()
{
cout << "My terminate function called." << endl;
abort();
}
int main()
{
terminate_handler oldHandler = set_terminate(termfunction);
// Throwing an unhandled exception would also terminate the program
// or we could explicitly call terminate();
//throw bad_alloc();
terminate();
}
get_unexpected
Geçerli unexpected_handler
işlevi alır.
unexpected_handler get_unexpected();
rethrow_if_nested
template <class E>
void rethrow_if_nested(const E& e);
Açıklamalar
Polimorfik sınıf türü değilse veya erişilemez veya belirsizse nested_exception
, hiçbir etkisi yoktur. Aksi takdirde dinamik bir atama gerçekleştirir.
set_unexpected
Beklenmeyen bir özel durumla karşılaşıldığında olmak üzere yeni unexpected_handler
bir oluşturur.
unexpected_handler set_unexpected(unexpected_handler fnew) throw();
Parametreler
yeni
Beklenmeyen bir özel durumla karşılaşıldığında çağrılacak işlev.
Dönüş Değeri
Önceki unexpected_handler
öğesinin adresi.
Açıklamalar
fnew null işaretçi olmamalıdır.
C++ Standardı, bir işlev oluşturma listesinde olmayan bir özel durum oluştururken çağrılması gerekir unexpected
. Geçerli uygulama bunu desteklemiyor. Aşağıdaki örnek doğrudan öğesini çağırır unexpected
ve ardından öğesini unexpected_handler
çağırır.
Örnek
// exception_set_unexpected.cpp
// compile with: /EHsc
#include <exception>
#include <iostream>
using namespace std;
void uefunction()
{
cout << "My unhandled exception function called." << endl;
terminate(); // this is what unexpected() calls by default
}
int main()
{
unexpected_handler oldHandler = set_unexpected(uefunction);
unexpected(); // library function to force calling the
// current unexpected handler
}
bitirmek
Bir sonlandırıcı işleyici çağırır.
void terminate();
Açıklamalar
işlevi, türünde void
bir işlev olan sonlandırma işleyicisini çağırır. Doğrudan program tarafından çağrılırsa terminate
sonlandırma işleyicisi, set_terminate çağrısı tarafından en son ayarlanan işleyicidir. Throw ifadesinin değerlendirilmesi sırasında diğer birkaç nedenden herhangi biri için çağrılırsa terminate
, sonlandırma işleyicisi throw ifadesi değerlendirildikten hemen sonra geçerli olan işleyicidir.
Sonlandırma işleyicisi çağırana geri dönemeyebilir. Program başlangıcında sonlandırma işleyicisi çağıran abort
bir işlevdir.
Örnek
kullanımına terminate
ilişkin bir örnek için bkz. set_unexpected.
throw_with_nested
template <class T> [[noreturn]]
void throw_with_nested(T&& t);
Açıklamalar
İç içe özel durumlarla özel durum oluşturur.
uncaught_exception
Yalnızca şu anda bir özel durum işleniyorsa döndürür true
.
bool uncaught_exception();
Dönüş Değeri
Throw ifadesinin değerlendirmesini tamamladıktan sonra ve eşleşen işleyicide özel durum bildiriminin başlatılmasını tamamlamadan veya throw ifadesinin sonucu olarak beklenmeyen çağrılmadan önce döndürürtrue
. Özellikle, uncaught_exception
bir özel durum geri sarma sırasında çağrılan bir yıkıcıdan çağrıldığında döndürür true
. Cihazlarda yalnızca uncaught_exception
Windows CE 5.00 ve üzeri sürümlerde (Windows Mobile 2005 platformları dahil) desteklenir.
Örnek
// exception_uncaught_exception.cpp
// compile with: /EHsc
#include <exception>
#include <iostream>
#include <string>
class Test
{
public:
Test( std::string msg ) : m_msg( msg )
{
std::cout << "In Test::Test(\"" << m_msg << "\")" << std::endl;
}
~Test( )
{
std::cout << "In Test::~Test(\"" << m_msg << "\")" << std::endl
<< " std::uncaught_exception( ) = "
<< std::uncaught_exception( )
<< std::endl;
}
private:
std::string m_msg;
};
// uncaught_exception will be true in the destructor
// for the object created inside the try block because
// the destructor is being called as part of the unwind.
int main( void )
{
Test t1( "outside try block" );
try
{
Test t2( "inside try block" );
throw 1;
}
catch (...) {
}
}
In Test::Test("outside try block")
In Test::Test("inside try block")
In Test::~Test("inside try block")
std::uncaught_exception( ) = 1
In Test::~Test("outside try block")
std::uncaught_exception( ) = 0
beklenmedik
Beklenmeyen işleyiciyi çağırır.
void unexpected();
Açıklamalar
C++ Standardı, bir işlev oluşturma listesinde olmayan bir özel durum oluştururken çağrılması gerekir unexpected
. Geçerli uygulama bunu desteklemiyor. Örnek, beklenmeyen işleyiciyi çağıran doğrudan çağırır unexpected
.
işlevi, türünde void
bir işlev olan beklenmeyen bir işleyici çağırır. Doğrudan program tarafından çağrılırsaunexpected
, beklenmeyen işleyici set_unexpected çağrısı tarafından en son ayarlanan işleyicidir.
Beklenmeyen bir işleyici çağırana geri dönemeyebilir. Yürütmeyi şu şekilde sonlandırabilir:
Beklenmeyen işleyici doğrudan program tarafından çağrılırsa, özel durum belirtiminde listelenen türde bir nesne veya herhangi bir türde nesne oluşturma.
bad_exception türünde bir nesne oluşturma.
Çağrı sonlandırma veya
abort
exit
.
Program başlangıcında beklenmeyen işleyici, terminate çağrısında bulunan bir işlevdir.
Örnek
kullanımına unexpected
ilişkin bir örnek için bkz. set_unexpected.