обработка исключений в списке инициализатора конструктора

Попробуйте эту команду:

editor.action.marker.nextInFiles

привязка по умолчанию F8 . Это перейдет к следующей проблеме в открытых файлах.

Alt - F8 будет переключаться между проблемами только в текущем файле.

5
задан aJ. 30 March 2009 в 12:41
поделиться

5 ответов

Во-первых при разыменовании стандарта Нулевого указателя, C++ не гарантирует, что это, исключение будет выдано, таким образом, код бесполезен для этого случая.

Во-вторых, если бы исключение было выдано, что сделал бы Ваш обработчик исключений?

В-третьих, блоки исключения конструктора/функции широко считаются, awaste времени - смотрят на этот http://www.gotw.ca/gotw/066.htm и другие статьи о сайте GotW Herb Sutter.

8
ответ дан 18 December 2019 в 06:04
поделиться

Стандарт C++ разделяет 15 / 3

Функциональный блок попытки связывает thector-инициализатор обработчика-seqwith и тело функции. Исключение, выданное во время выполнения выражений инициализатора в ctor-инициализаторе или во время выполнения тела функции, передает управление обработчику в функциональном блоке попытки таким же образом как исключение, выданное во время выполнения управления поблочных передач попытки к другим обработчикам.

class C 
{  
    int i;  
    double d;  
public:  
    C(int, double);  
};  

C::C(int ii, double id)  
try  : i(f(ii)), d(id)  
{  
//constructor function body  
}  catch (...)  
{  
//handles exceptions thrown from the ctor-initializer  
//and from the constructor functionbody  
}
11
ответ дан 18 December 2019 в 06:04
поделиться

В соответствии с этой статьей, похоже, что Вы просто не можете сделать этого в VC ++ 6.0

Вы или имели бы к upgade к 7,0 или просто сделали бы инициализацию в теле конструктора вместо этого.

4
ответ дан 18 December 2019 в 06:04
поделиться

Разве вы не можете просто использовать функцию для проверки ptr, Например:

template<typename P>
P* checkPtr (P* p)
{
    if (p == 0)
        throw std::runtime_error ("Null pointer");
    return p;
}

class Test2
{
public:
    Test2 (Test* pTest)
        : m_pTest (checkPtr (pTest))
    {
    }

    Test* m_pTest;
};
3
ответ дан 18 December 2019 в 06:04
поделиться

Люди все еще используют VC6? Серьезно, VC6 является едва компилятором жалобы стандартов. Сделайте себе одолжение и по крайней мере получите VS2005. VC6 является Вашей проблемой. Попробуйте VS2008, выражают и видят, компилирует ли он.

Другая опция, конечно, состоит в том, чтобы взять ссылку на конструкции, которая должна быть связана.

1
ответ дан 18 December 2019 в 06:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: