yeni" /> yeni" />
SORU
17 Mart 2009, Salı


C yeni anahtar kelime kullanmalıyım ?

Kısa bir süreliğine C kullanıyorum ve merak ediyorumyenianahtar kelime. Bunu kullanarak olabilir, ya da sadece,?

1)yenianahtar kelime...

MyClass* myClass = new MyClass();
myClass->MyField = "Hello world!";

2). Olmadan ^em>yenianahtar kelime...

MyClass myClass;
myClass.MyField = "Hello world!";

Bir uygulama perspektifi yok gibi görünüyor farklı (ama eminim onlar... Ancak, benim birincil dili C# ve elbette 1 yöntem nedir alışığım.

Zorluk yöntem 1 std C sınıfları ile kullanmak için daha zor gibi görünüyor.

Hangi yöntemi kullanmalıyım?

Güncelleme 1:

Geçenlerde kullanılıryeniiçin anahtar kelimeyığın(veya . bellek ^em>ücretsiz mağaza) kapsam dışına gidiyordu büyük bir dizi (bir işlevinden döndürülen yani). Elemanların yarısı kapsamı dışında bozuk olmasına neden olan yığın kullanarak, nerede olduğumu, yığın kullanımı için anahtarlama elemanları inceliğini sağlamıştır. Yay!

Güncelleme 2:

Bir arkadaşım geçenlerde new anahtar kelime; her türü kullanmak için basit bir kural olduğunu söyledi new, 7 ** yazın.

Foobar *foobar = new Foobar();
delete foobar; // TODO: Move this to the right place.

Bu hep sil bir yere koymak gerek (kesmek ve yapıştırmak ya da bir yıkıcı veya başka bir şekilde yani) bellek sızıntıları önlemek için yardımcı olur.

CEVAP
17 Mart 2009, Salı


Yöntem 1 (new)

  • free store (Bu sık sık aynı şeydir . bu nesne için bellek ayırır ^strong>yığın)
  • Gerektirir, açıkça 10 ** bir nesne daha sonra. (Eğer bunu silmek bile, bellek sızıntısına neden olabilir)
  • Bellek kalır kadar delete ayrılmış. (yani 12* *new kullanarak oluşturduğunuz bir nesne olabilir)
  • Söz konusu örnek işaretçi delete d; sürece 22**her zaman silinmelidirhangi kontrol yol alınır, ya da eğer özel durumlar için durum olursa , ne olursa olsun.

Yöntem 2 (new kullanarak değil)

  • Ayırır nesne için bellekyığıntüm yerel değişkenler nereye) genellikle daha az yığın bellek için kullanılabilir; eğer çok sayıda nesne atarsanız, yığın taşması riski var.
  • delete daha sonra gerek kalmayacak.
  • Bellek artık kapsam dışına çıktığında ayrılır. (yani gerek bir nesneye bir işaretçi yığını) 17* mi *

Bildiğim kadarıyla kullanmak için; yöntemini seçmek gibi en yukarıdaki kısıtlamaları göz önüne alındığında, işe yarıyor.

Bazı durumlarda kolay:

  • Eğer ** 18, (memory leaks neden olasılığı) arama için endişelenmene gerek yok eğer doğru değilse new kullanmamalısın.
  • Eğer bir işlev nesnesi için bir işaretçi dönmek isterseniz, new kullanmanız gerekir

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Atlantic Records

    Atlantic Rec

    15 Aralık 2006
  • MrSuicideSheep

    MrSuicideShe

    9 NİSAN 2010
  • SketchBookPro

    SketchBookPr

    6 Mayıs 2009