Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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 voidbir 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 abortbir işlevdir.
Örnek
kullanımına terminateiliş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 voidbir 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
abortexit.
Program başlangıcında beklenmeyen işleyici, terminate çağrısında bulunan bir işlevdir.
Örnek
kullanımına unexpectedilişkin bir örnek için bkz. set_unexpected.