SORU
18 Aralık 2009, Cuma


İyi bir uygulama sildikten sonra bir işaretçi NULL.

Dışarı diyerek başlamak istiyorumakıllı işaretçileri kullanın ve asla bu konuda endişelenmenize gerek kalmayacak.

Aşağıdaki kod ile sorunlar nelerdir?

Foo * p = new Foo;
// (use p)
delete p;
p = NULL;

Bu da başka bir soru için an answer and comments olarak göze çarpıyor. Neil Butterworth bir yorum birkaç upvotes üretilen:

NULL silmek için aşağıdaki işaretçiler ayarı C evrensel iyi bir uygulama değil . Yapmak için iyi bir şey olduğu zamanlar vardır, ve anlamsızdır ve gizlemek zaman hataları.

Yardımcı olmaz şartlar var. Ama benim durumumda, zarar veremez. Biri beni aydınlatın.

CEVAP
18 Aralık 2009, Cuma


Ayar işaretçiler NULL sonra silinmiş ne çekti kesinlikle zarar gelmez, ama genellikle biraz yara bandı üzerinden bir daha temel bir sorun: Neden kullanıyorsun bir işaretçi ilk başta? Tipik iki sebep görüyorum:

  • Sadece bir öbek üzerinde tahsis istedim. Bu durumda DEMİRYOLU nesne kaydırma çok daha güvenli ve daha temiz olurdu. Artık nesne gerektiğinde DEMİRYOLU nesnenin kapsam sonu. std::vector çalışır ve yanlışlıkla kaldırıldı bellek işaretçileri etrafında bırakarak sorunu çözer. Göstericiler var.
  • Ya da belki biraz karmaşık bir ortak mülkiyet semantik istedin. İşaretçi new döndü delete adında bir aynı olmayabilir. Birden fazla nesne aynı anda nesne bu arada kullanmış olabilirsiniz. Bu durumda, paylaşılan bir işaretçi ya da ona benzer bir şey tercih edilebilirdi.

Kural eğer kullanıcı kodu etrafında işaretçileri bırakırsanız, Yanlış Yapıyorsun. İşaretçiyi oraya çöp işaret etmek olmamalı. Neden orada bir nesne geçerliliğini sağlamak için sorumluluk almak değil mi? Neden sivri nesne yaptığında kapsamı bitmiyor?

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • schmittastic

    schmittastic

    9 EYLÜL 2009
  • Thom Hall

    Thom Hall

    24 Kasım 2006
  • Ty Moss

    Ty Moss

    20 Kasım 2007