LINUX.ORG.RU

История изменений

Исправление eao197, (текущая версия) :

Сударь, вы невежа! Вы не понимаете, как работают конструкторы в C++ и что происходит при выбрасывании исключения из конструктора.

В C++ном примере у вас нет объекта типа D. Он вообще не был создан. Вы напечатали какой-то случайный мусор, поскольку указатель d у вас не был проинициализирован. Попробуйте вот так:

#include <iostream>

class Data {
public:
    Data() {
        v1 = 1;
        throw "error";
        v2 = 2;
    }

public:
    int v1;
    int v2;
};

int main()
{
    Data *d = nullptr;

    try {
        d = new Data();
    } catch(...) { }

    std::cout << d << std::endl;
}

Исходная версия eao197, :

Сударь, вы невежда! Вы не понимаете, как работают конструкторы в C++ и что происходит при выбрасывании исключения из конструктора.

В C++ном примере у вас нет объекта типа D. Он вообще не был создан. Вы напечатали какой-то случайный мусор, поскольку указатель d у вас не был проинициализирован. Попробуйте вот так:

#include <iostream>

class Data {
public:
    Data() {
        v1 = 1;
        throw "error";
        v2 = 2;
    }

public:
    int v1;
    int v2;
};

int main()
{
    Data *d = nullptr;

    try {
        d = new Data();
    } catch(...) { }

    std::cout << d << std::endl;
}