Sobes.tech
Junior — Middle

Агар дар сохтмончи объект ягон истисно пайдо шавад, чӣ мешавад бо даъвати деструктор?

sobes.tech AI

Ҷавоб аз AI

Агар дар конструктори объект дар C++ истисно пайдо шавад, деструктори он наметавонад даъват шавад, зеро объект ҳисоб мешавад, ки пурра сохта нашудааст.

Аммо, деструкторҳои аъзои аллакай пурра сохташудаи объект ва синфҳои асосӣ, ки пеш аз пайдоиши истисно бо муваффақият сохта шудаанд, барои озод кардани дурусти захираҳо даъват мешаванд.

Масалан:

class A {
public:
    A() { throw std::runtime_error("Хатои дар конструктор"); }
    ~A() { std::cout << "Деструктори A" << std::endl; }
};

class B {
    A a;
public:
    B() { }
    ~B() { std::cout << "Деструктори B" << std::endl; }
};

int main() {
    try {
        B b; // дар вақти сохтани a дар B() истисно меафтад
    } catch (...) {
        std::cout << "Истисно гирифта шуд" << std::endl;
    }
}

Дар ин мисол, деструктори B даъват намешавад, зеро объект B пурра сохта нашудааст, аммо деструктори A даъват мешавад агар A пеш аз истисно муваффақона сохта шуда бошад.