SORU
10 NİSAN 2012, Salı


Ne zaman bir C denilen yıkıcı mı?

Temel Soru şu: bir program yaptığında bir ara sınıf' C yıkıcı yöntem ? Bir nesne kapsam dışına çıkarsa ne zaman denir söylendi veya delete a tabi tutulur

Daha spesifik sorular:

1) nesne ile oluşturulan bir işaretçi ve bu gösterici daha sonra silinmiş veya verilen yeni bir adrese işaret ediyor nesne olduğunu işaret arayıp kendi yıkıcı (varsayarak başka bir şey işaret)?

2) konu hakkında bir nesneyi tanımlayan 1, Takip scope (bir nesne {blok} verilen ayrıldığında ilgili değil dışına gider. Diğer bir deyişle, ne zaman bir yıkıcı bağlantılı liste nesne denir?

3) hiç bir yıkıcı elle aramak ister misin?

CEVAP
10 NİSAN 2012, Salı


1) nesne ile oluşturulan bir işaretçi ve bu gösterici daha sonra silinmiş veya verilen yeni bir adrese işaret ediyor nesne olduğunu işaret arayıp kendi yıkıcı (varsayarak başka bir şey işaret)?

Göstericiler Türüne göre değişir. Örneğin, akıllı işaretçileri genellikle silindiğinde nesneleri sil. Sıradan işaretçiler. Aynı bir işaretçi farklı bir nesneye işaret yapıldığında doğrudur. Bazı akıllı işaretçiler eski nesne yok, ya da eğer daha fazla başvuru varsa onu da yok eder. Sıradan işaretçiler böyle bir zeka var. Onlar sadece bir adres tutun ve özellikle böyle yaparak işaret ettikleri nesneler üzerinde işlem yapmak için izin verir.

2) konu hakkında bir nesneyi tanımlayan 1, Takip scope (bir nesne {blok} verilen ayrıldığında ilgili değil dışına gider. Diğer bir deyişle, ne zaman bir yıkıcı bağlantılı liste nesne denir?

Bağlantılı liste uygulaması kalmış. Tipik bir koleksiyon yok edilir, bunların içerdiği tüm nesneleri yok.

Yani, işaretçiler bağlantılı bir listesi genellikle işaretçiler ama işaret ettikleri nesneleri yok eder. Doğru. ( Diğer göstericiler tarafından referansları olabilir.) Bağlantılı bir liste özellikle işaretçiler içerir için tasarlanmıştır, ancak, kendi yıkım nesneleri silin.

Akıllı işaretçiler bağlantılı bir listesi işaretçileri silindiğinde otomatik olarak nesneleri silmek, ya da eğer başvuru olsaydı öyle yapardı. İstediğiniz ne kadar bütün bu parçaları birleştirmek için.

3) hiç bir yıkıcı elle aramak ister misin?

Emin. Bir örnek, eğer aynı türde başka bir nesne ile bir nesne değiştirmek isterseniz olur ama bellek sadece tekrar ayırmak için özgür olmasını istemiyorum. Yerde eski nesne yok etmek ve yerine yeni bir tane oluşturabilirsiniz. (Ancak, genellikle bu kötü bir fikir.)

// pointer is destroyed because it goes out of scope,
// but not the object it pointed to. memory leak
if (1) {
 Foo *myfoo = new Foo("foo");
}


// pointer is destroyed because it goes out of scope,
// object it points to is deleted. no memory leak
if(1) {
 Foo *myfoo = new Foo("foo");
 delete myfoo;
}

// no memory leak, object goes out of scope
if(1) {
 Foo myfoo("foo");
}

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ethr95awd

    ethr95awd

    8 Kasım 2006
  • Rugiagialia

    Rugiagialia

    1 Ocak 2008
  • TomKNJ

    TomKNJ

    26 ŞUBAT 2007