SORU
15 NİSAN 2009, ÇARŞAMBA


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
15 NİSAN 2009, ÇARŞAMBA


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[].

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Charles Renaud

    Charles Rena

    10 Kasım 2007
  • Diogo Oliveira

    Diogo Olivei

    4 HAZİRAN 2006
  • Official Clouds

    Official Clo

    1 HAZİRAN 2011