Tavsiye, 2024

Editörün Seçimi

Yapıcı ve Yıkıcı Arasındaki Fark

Bazen, bir nesnenin bir bölümünü kullanılmadan önce başlatmak gerekir. Örneğin, yığın üzerinde çalışıyoruz, herhangi bir işlem yapmadan önce yığının tepesi daima sıfıra ayarlanmalıdır. Bu otomatik başlatma özelliği, 'Oluşturucu' aracılığıyla gerçekleştirilir. Muhtemelen, eğer bir nesne imha edilmeden önce bazı kodları çalıştırmak zorundaysa. Örneğin, bir nesne imha edilmeden önce, açtığı bir dosyayı kapatması gerekiyorsa. 'Yıkıcı' yardımı ile gerçekleştirilebilir.

Karşılaştırma tablosu yardımıyla yapıcı ve yıkıcı arasındaki temel farklardan bazılarını gözden geçirelim.

Karşılaştırma Tablosu:

Karşılaştırma için temelinşaatçıçöp yakma fırını
amaç
Belleği bir nesneye ayırır.Bir nesnenin hafızasını serbest bırakır.
deklarasyonclass_name (eğer varsa değişkenler) {};~ sınıf_adı (bağımsız değişken yok) {};
ArgümanlarYapıcı argümanı kabul ederYıkıcı herhangi bir argümanı kabul etmiyor.
çağrıNesne oluşturulurken yapıcı otomatik olarak çağrılır.Bloktan çıkıldığı veya programın sona erdiği için yıkıcı otomatik olarak çağrılır.
ÇalışmaYapıcı, kullanılmadan önce nesnenin değerinin bir kısmını başlatmasına izin verir.Yıkıcı, nesnenin imha sırasında bazı kodlar çalıştırmasına izin verir.
İcra emri
Yapıcı art arda sırada çağrılır.
Yıkıcı, kurucu sırasına göre çağrılır.
SayılarlaSınıfta birden fazla kurucu olabilir.Fakat sınıfta her zaman tek bir yıkıcı vardır.
Oluşturucu KopyalaYapıcıyı kopyala, yapıcının bir nesneyi başka bir nesneden bildirmesini ve başlatmasını sağlar.Böyle bir kavram yok.
Aşırı yüklemeYapıcılar aşırı yüklenebilir.Yıkıcı aşırı yüklenemez.

Yapıcının Tanımı:

Yapıcı temel olarak nesneyi başlatan ve ona bellek ayıran sınıfın üye bir işlevidir. Yapıcılar, tanımlandıkları ve sınıfın adıyla aynı adda tanımlandıkları gibi kolayca tanımlanabilirler. Bir yapıcı herhangi bir geri dönüş türüne sahip değildir; bu yüzden hiçbir şey döndürmezler, 'geçersiz' bile değiller. Bir kurucu her zaman bir sınıfın ortak bölümünde tanımlanır.

Bir sınıfta birden fazla kurucu olabilir; iletilen argümanların sayısına ve türüne göre ayırt edilebilirler. Bir sınıfta birden fazla kurucu varsa; örtülü kurucu (hiçbir şey yapmaz yapıcı), bunlarla birlikte tanımlanmalıdır; hiçbir şey yapmaz ama derleyiciyi tatmin eder.

Yapıcılar ayrıca varsayılan argümanlarla da tanımlanabilir. Oysaki nesneyi “dinamik olarak” başlatıyorlar. Yapıcılar ne kalıtsal, ne de sanal olabilir, ancak aşırı yüklenebilirler. Adreslerine yönlendirilemezler.

Yapıcı uygulaması:

 sınıf Const {int a, b; public: Const () {// yapıcı olmayan a = 0; b = 0; } Const (int c, int d) {// yapıcı olan a = c parametresi; c = d'dir; }}; int main () {Const C1; C2 (10, 20); // bu ifade, yapıcıyı çağırıyor} 

C1 oluşturulduğunda parametresi olmayan bir kurucu yürütülür, çünkü C1 herhangi bir parametreyi geçmez. Oysa C2 oluşturulduğunda, yapıcıya iki tamsayı geçerken parametresi olan bir yapıcı çalıştırılır.

Destructor'un tanımı:

Bir Yıkıcı ayrıca bir nesneye tahsis edilen hafızayı serbest bırakan bir sınıfın üye işlevidir. Bir tilde (~) sembolünden önce gelen bir sınıfın adı ile aynı adla tanımlanır. Yıkıcılar her zaman kurucuların tersi sırasına göre çağrılır.

Herhangi bir argümanı kabul etmediği için sınıfta her zaman tek bir yıkıcı vardır. Yerel cisimler, infazın kontrolü bloktan çıktığı anda imha edilir; Öte yandan, tüm program sona erdiğinde, küresel nesneler imha edilir. Bir yıkıcı, derleyici tarafından dolaylı olarak adlandırılır. Sınıflar miras alınmışsa ve bir sınıf ebeveyn sınıfından türetilmişse ve hem alt sınıf hem de üst sınıf yıkıcılara sahipse; daha sonra, ilk önce türetilmiş sınıfın yıkıcısı, ardından da ana sınıfın yıkıcısı olarak adlandırılır.

Yıkıcı Uygulaması:

 sınıf Const {int a, b; public: Const (int c, int d) {// parametreli yapıcı. a = C; c = d'dir; cout << "a ve b'nin değeri" < 

C1 nesnesi yaratıldığında, iki tamsayılı parametreli bir yapıcı çağrılır ve “a, b” üyesi başlatılır ve “a, b” değeri yazdırılır. Bu yıkıcı çalıştırıldıktan sonra “C1 nesnesi yok edildi” mesajını yazdırın.

Yapıcılar ve Yıkıcılar arasındaki Temel Fark

  1. Bir yapıcının asıl amacı, oluşturulduklarında nesnelere bellek tahsis etmektir; oysa bir imhacının asıl amacı, tahrip edildiğinde nesnenin hafızasını boşaltmaktır.
  2. Bir yapıcının argümanları kabul etmesine izin verilir, çünkü argümanlar sınıfın veri üyelerini başlatmak için kullanılabilir. Bir yıkıcı herhangi bir argümanı kabul etmemektedir, çünkü tek eseri nesnenin hafızasını serbest bırakmaktır.
  3. Bir nesne oluşturulduğunda bir yapıcı çağrılır. Diğer yandan, bir program sonlandırıldığında veya program nesnenin oluşturulduğu bloktan çıktığında bir yıkıcı çağrılır.
  4. Bir kurucu genellikle sınıfın veri üyelerini başlatmak için kullanılır, oysa nesnenin yok edilmeden önce bir eylem gerçekleştirmesine izin vermek için bir yıkıcı kullanılır.
  5. Yapıcılar art arda sırayla yürütülür, yani temel sınıfı miras alan türetilmiş bir sınıf varsa ve türetilmiş sınıfın nesnesi oluşturulmuşsa, o zaman önce temel sınıfın yapıcısını ve sonra türetilmiş sınıfın yapıcısını çağıracaktır. Öte yandan, türetilmiş sınıfın yıkıcısı ilk olarak adlandırılır ve daha sonra temel sınıf, bir yıkıcının kurucuya ters sırada uygulandığı anlamına gelir.
  6. Sınıfta, geçen sayı argümanları tarafından tanımlanan birden fazla kurucu olabilir. Sınıfta sadece bir yıkıcı var.
  7. Bir nesnenin başka bir nesneden başlatılmasını sağlayan bir kopya kurucusu kavramı varken, yıkıcının böyle bir kavramı yoktur.
  8. Yapıcılar aynı yapıcı adı altında farklı eylemler gerçekleştirmek için aşırı yüklenebilir, oysa yıkıcılar aşırı yüklenemez.

Sonuç:

Benzerliğin yanı sıra, bu kurucu ve yıkıcı, bir sınıfın özel üye işlevidir ve aynı isme sahip, her ikisi arasındaki temel fark, hafıza tahsisi sırasında 'kurucu' olarak adlandırılır ve 'yıkıcı' olarak adlandırılır. Nesnelerin hafızasının boşaltılması Hem yapıcı hem de yıkıcı, sınıfta tanımlanmamış olsalar bile derleyici tarafından dolaylı olarak adlandırılır.

Top