Aracılığıyla paylaş


<exception> işlevleri

current_exception

Geçerli özel durum için bir akıllı işaretçi alır.

exception_ptr current_exception();

İade 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

Dışında
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.

İade 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_exceptionexception_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.

İade 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.

İade 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
}

Sonlandır

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();

İade 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

Beklen -medik

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.