Sobes.tech
Junior — Middle

Bir nesnenin yapıcı fonksiyonunda istisna oluşursa, nesnenin yıkıcı fonksiyonunun çağrısı ne olur?

sobes.tech yapay zeka

AI'dan gelen yanıt

C++'ta bir nesnenin yapıcı fonksiyonunda istisna oluşursa, bu nesnenin yıkıcı fonksiyonu çağrılmaz, çünkü nesne tam olarak oluşturulmamış sayılır.

Ancak, nesnenin üyelerinin ve temel sınıfların, istisna oluşmadan önce başarıyla oluşturulmuş olanların yıkıcıları, kaynakları düzgün şekilde serbest bırakmak için çağrılır.

Örnek:

class A {
public:
    A() { throw std::runtime_error("Yapıcıda hata"); }
    ~A() { std::cout << "A yıkıcı" << std::endl; }
};

class B {
    A a;
public:
    B() { }
    ~B() { std::cout << "B yıkıcı" << std::endl; }
};

int main() {
    try {
        B b; // B() içinde a oluşturulurken istisna atılır
    } catch (...) {
        std::cout << "İstisna yakalandı" << std::endl;
    }
}

Bu örnekte, B'nin yıkıcı fonksiyonu çağrılmaz, çünkü B nesnesi tam olarak oluşturulmamıştır, ancak A'nın yıkıcı fonksiyonu, A başarıyla oluşturulduysa çağrılır.