C++ yıkıcı metotlar (destructor)

C++ programlama dilinde “yıkıcı metotlar” terimi, bir sınıftan türetilen nesnelerin bellekten silinme sürecini yöneten ve özel olarak tanımlanabilen metotları ifade eder. Bu metotlar genellikle sınıfın özel ihtiyaçlarına göre uyarlanabilir ve nesnenin ömrü sona erdiğinde çalıştırılır.

C++ dilinde üç temel yıkıcı metot vardır:

1) Destructor (Yıkıcı Metot)

Sınıfın nesnesi bellekten silinirken otomatik olarak çağrılan bir metottur. Sınıfın ismiyle aynıdır, önünde tilde (~) işareti bulunur. Örneğin:

class MyClass {
public:
    // Constructor (Kurucu Metot)
    MyClass() {
        // Constructor kodu
    }

    // Destructor (Yıkıcı Metot)
    ~MyClass() {
        // Destructor kodu
    }
};

Nesnenin ömrü sona erdiğinde, C++ çalışma zamanı tarafından otomatik olarak çağrılan bu metot, nesnenin kaynaklarını (örneğin, dinamik olarak alınan bellek) serbest bırakmak veya diğer temizleme işlemlerini gerçekleştirmek için kullanılır.

2) Copy Constructor (Kopya Kurucu)

Bir nesnenin başka bir nesneyle aynı türden kopyalanması durumunda çağrılan metottur. Bir sınıfın kopya kurucusu, T(const T&) şeklinde tanımlanır (T, sınıfın adıdır). Eğer bu metot tanımlanmazsa, derleyici tarafından otomatik olarak oluşturulur.

class MyClass {
public:
    // Copy Constructor (Kopya Kurucu)
    MyClass(const MyClass& other) {
        // Kopya kurucu kodu
    }
};

3) Move Constructor (Taşıma Kurucu)

C++11 ve sonraki standartlarda kullanılan bir metottur. Nesnelerin kaynaklarını başka bir nesneye “taşımak” için kullanılır. Eğer bu metot tanımlanmazsa, derleyici tarafından otomatik olarak oluşturulur.

class MyClass {
public:
    // Move Constructor (Taşıma Kurucu)
    MyClass(MyClass&& other) noexcept {
        // Taşıma kurucu kodu
    }
};

Bu yıkıcı metotlar, sınıfların özel ihtiyaçlarına göre uyarlanabilir ve nesnenin yaşam döngüsü boyunca çeşitli işlemleri gerçekleştirmek için kullanılır. Bu metotlar, özellikle dinamik bellek yönetimi, kaynak serbest bırakma ve diğer özelleştirilmiş temizleme işlemleri gibi durumlar için önemlidir.

Aşağıda, basit bir Araba sınıfı örneği verilmiştir. Bu örnekte, bir arabanın markası, modeli ve üretim yılı gibi özellikler bulunmaktadır. Ayrıca, sınıfın yıkıcı metodu olan ~Araba() metodu, bir araba nesnesi bellekten silindiğinde çağrılacak temizleme işlemlerini içermektedir.

#include <iostream>
#include <string>

class Araba {
public:
    // Kurucu metot
    Araba(const std::string& marka, const std::string& model, int uretimYili)
        : marka(marka), model(model), uretimYili(uretimYili) {
        std::cout << "Araba nesnesi olusturuldu: " << marka << " " << model << " (" << uretimYili << ")\n";
    }

    // Yıkıcı metot
    ~Araba() {
        std::cout << "Araba nesnesi silindi: " << marka << " " << model << " (" << uretimYili << ")\n";
    }

    // Diğer işlevler
    void BilgileriGoster() const {
        std::cout << "Marka: " << marka << ", Model: " << model << ", Uretim Yili: " << uretimYili << "\n";
    }

private:
    std::string marka;
    std::string model;
    int uretimYili;
};

int main() {
    // Araba nesnesi oluşturuluyor
    Araba araba1("Toyota", "Corolla", 2022);

    // Araba bilgileri gösteriliyor
    araba1.BilgileriGoster();

    // main fonksiyonu sona erdiğinde, araba1 nesnesinin ömrü sona erecek
    // ve bu durumda Araba sınıfının yıkıcı metodu (~Araba()) çağrılacak

    return 0;
}

Bu örnekte, main fonksiyonu içinde bir Araba nesnesi oluşturuluyor. Nesnenin özellikleri (marka, model, uretimYili) kurucu metot aracılığıyla ayarlanıyor. Nesnenin bilgileri gösterildikten sonra main fonksiyonu sona erdiğinde, Araba sınıfının yıkıcı metodu otomatik olarak çağrılacak ve nesnenin bellekten silinme işlemleri gerçekleştirilecektir. Bu, nesnenin ömrü sona erdiğinde otomatik olarak temizleme işlemlerinin yapılmasını sağlayan bir örnektir.

Ads Blocker Image Powered by Code Help Pro

Reklam Engelleyici Algılandı!

Reklamları engellemek için uzantı kullandığınızı tespit ettik.

Lütfen bu reklam engelleyiciyi devre dışı bırakarak ya da sitemize izin vererek bize destek olun.

Dikkat: VPN eklentiniz üzerinde de reklam engelleyici olabilir.