SORU
2 Aralık 2008, Salı


C Nesne Örnekleme

Bir C programcısı C anlamaya çalışıyorum . Birçok dersler nesne örnekleme bir parçacık gibi kullanarak göstermek:

Dog* sparky = new Dog();

daha sonra yapacağını ima:

delete sparky;

mantıklı. Şimdi, dinamik hafıza ayırma gereksiz halinde, yukarıda yerine kullanmak için bir sebep

Dog sparky;

ve yıkıcı sparky kapsam dışına çıkarsa bir kez olsun?

Teşekkürler!

CEVAP
2 Aralık 2008, Salı


Tam tersine, her zaman ayırmaları yığın, genel bir kural olarak, asla kullanıcı sil yeni/kodu var ölçüde tercih etmelisiniz.

Dediğiniz gibi, değişken yığında bildirirken, kendi yıkıcı kaynak ömür boyu izleme ve sızıntıları önlemek için ana araç olan kapsam dışına gider, ne zaman otomatik olarak adlandırılır.

Yani genel olarak, her zaman ihtiyacınız için ayrılacak bir kaynak, ister hafıza (çağırarak yeni), dosya kolları, yuva veya başka bir şey sarma dersini nerede yapıcı edinme kaynak ve yıkıcı serbest bırakır. Yığında bu türde bir nesne oluşturabilir ve kaynak kapsam dışına çıktığında serbest alır garanti ediyoruz. Yeni/parça yok öyle her yerde bulabilirsiniz, bellek sızıntıları önlemek emin olmak için silin.

Bu deyim için en çok kullanılan isim RAII

Ayrıca nadir vakalarda, ortaya çıkan göstericiler sarmak için kullanılan akıllı işaretçi sınıflara bak adanmış DEMİRYOLU bir nesne dışında yeni bir şey ayırmak zorunda. Senin yerine başvuru sayarak örneğin sonra ömrünü izleyen akıllı bir işaretçi, işaretçi geçirmek, ve son başvuru kapsam dışına çıktığında yıkıcı çağırır. Standart kütüphane basit std::unique_ptr kapsam tabanlı bir yönetim var, ve referans sayma paylaşılan sahipliği uygulamak için yapar std::shared_ptr.

Birçok dersler nesne göstermek örnekleme bir parçacık gibi kullanarak ...

Yani keşfettiğin şey çok dersler berbat. ;) Çoğu öğreticiler berbat C uygulamaları, yeni/delete gerekli olmadığında değişkenleri oluşturmak için arıyorum, ve sen zor bir zaman ayırmaları ömür boyu izleme verilmesi de dahil olmak üzere öğretmek.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Autocar

    Autocar

    11 Mart 2006
  • CaliforniaMetin

    CaliforniaMe

    3 ŞUBAT 2013
  • mist64

    mist64

    30 Mayıs 2006