C referans bir değişken döndüren bir uygulamadır, kötü mü?
Bu bence biraz özneldir; eğer bu görüş oybirliğiyle (başvurular burada döndürülen kod parçacıkları çok gördüm) olacak mı emin değilim.
this question I just asked, regarding initializing references, referans kötü çünkü, anladığım kadarıyla [] olabilir döndükten doğru bir yoruma göre bellek sızıntıları yol açabilir daha kolay siliniyor bayan için yapar.
Örnekler hayal gördüğümü sürece) takip ve adil bir kaç yerde benim yaptığım gibi bu beni endişelendiriyor,... yanlış anladım? Şeytan mı? Eğer öyleyse, ne kadar kötü?
Ben hissediyorum çünkü benim karışık çanta işaretçiler ve başvurular, birlikte olması, ben yeni C ve toplam karmaşa, ne için kullandığınızda, benim uygulamalar olmalı bellek sızıntısı cehennem...
Ayrıca, akıllı/paylaşılan işaretçileri kullanarak genellikle en iyi yol olarak bellek sızıntıları önlemek için kabul ettiğini anlıyorum.
CEVAP
Yani:
int& getInt(void)
{
int i;
return i;
}
Bu kötü her türlü. Bu yığın ayırmabengidecek ve hiçbir şey başvuruyorsunuz. Bu yarı şeytan:
int& getInt(void)
{
int *i = new int;
return *i;
}
Şimdi istemci sonunda garip çünkü:
int& myInt = getInt(); // note the &.
int badInt = getInt(); // the & will be easy to miss (source of problems).
delete &myInt; // must delete.
delete &badInt; // won't work. badInt was a copy of the allocated int, which
// is now lost forever
Bunun gibi bir işi yapmanın en iyi yolu bence
int *getInt(void)
{
return new int;
}
Ve şimdi istemci bir işaretçi saklar
int *myInt = getInt(); // has to be a pointer
int& weirdInt = *getInt(); // but this works too if you really want.
delete myInt; // being a pointer, this is easy to do.
delete &weirdInt; // works.
Şimdi operatör zincirleme <<
print () gibi sınıfları için &
güçlüdür, veya operator[]
.
Hangi durum Python kötü/yasadışı değiş...
Java değişken referans vs AtomicRefere...
Bir "boş" referans uzantısı ...
Bir değişken, nesne ve referans arasın...
Neden değişken yapılar“”? kötü...