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.