++ Java örtülü olan işaretçiler vardır. Eğer bu sınıfın bir nesne için bir başvuru oluştururken
MyClass name;
yazarken çünkü Java'da , sen açıkça bir nesne oluşturmak gerekir. Bu, adın gerçek nesne adresini içeren küçük bir bellek konumunu tanımladığı anlamına gelir. Tüm evi yeni kullanarak oluşturduğunuzda, yalnızca bu küçük bellek konumuna atanan adresi döndürür.
C++ bellek daha iyi kontrol var ve bir nesne oluşturma 2 yolu vardır: Eğer
MyClass object;
Bu nesne yığınında oluşturulan deyimi kullanırsanız . Bu, işlev döndüğünde, nesnenin yok olduğu anlamına gelir. Yeni operatör kullanılmadan nesnenin otomatik olarak oluşturulduğunu unutmayın. Eğer yığın imha inat bir nesneyi isterseniz, yeni oluşturulan nesneye bir işaretçi döndürür yeni operatörünü kullanacağız:
MyClass *objectPtr = new MyClass();
* sınıf adından sonra yerleştirilen, sen istediğini gösterir Bu nesnenin bir tahsisatı yerine göreceli işaretçi türü. Böyle yapabilirsiniz Yani
delete objectPtr;
:
MyClass *yourfunction(bool param) {
if (param)
return new MyClass(A);
return new MyClass(B);
}
Eğer bir bellek sızıntısı artık nesne gerekmez, ya da orada olacak zaman hafızasını temizlemek zorunda unutmayın
Yine de, Pointer'ların hiç güvenli olmadığını bileceksiniz! Kullanıcı kontrolünü işaretçiler üzerinden vermek kötü bir koda, kötü uygulamalara ve iyi olmayan şeylere yol açabilir. Hemen örnek: nesne kullanımından sonra belleği temizlemeyi unutursanız ne olur?)
Bu durumda akıllı işaretçiler kullanırsanız daha iyi, ama şimdi söylemek için gerçekten çok fazla şey var :) Googling tadını çıkarın!
Varsayılan meyve kaçar ve şehri terörize ederse ne olur? Hayır, cidden, 'kaçtı' ile ne demek istiyorsun? –
_ Killer Kumquats'ın tacizi!_ –
Daha ciddi bir notta: [önceki sorunuza] yanıt olarak çözümlerle ilgili sorun nedir? (Http://stackoverflow.com/questions/3285970/c-and-returning-a-null-what-worked- in-java-iş-içinde-c görünmez)? Sanırım bu soruya verilen cevapların bu soruya nasıl cevap vermediğini göremiyorum. –