SORU
2 EKİM 2008, PERŞEMBE


C 'nihayet' blok destekliyor mu? (Ve'in bu 'DEMİRYOLU' duymaya devam ediyorum?)

C desteklemiyor '2* *' bloklar?

RAII idiom nedir?

C arasındaki fark 'nın DEMİRYOLU ve C#'s 'using' statement deyim nedir?

CEVAP
2 EKİM 2008, PERŞEMBE


Hayır, C desteklemiyor "sonunda" blok. Neden C yerine DEMİRYOLU destekler ise: "Kaynak Edinimi Başlatma" -- birkötü bir isimgerçekten yararlı bir kavram.

Fikir, bir nesnenin yıkıcı kaynakları boşaltmak için sorumludur. Nesne otomatik depolama süresi, nesnenin yıkıcı oluşturulduğu blok blok bir istisna huzurunda çıkıldı bile çıktığında adı verilecek. Burada konu Bjarne Stroustrup's explanation.

DEMİRYOLU için ortak bir kullanım bir dışlama kilitleme

// A class with implements RAII
class lock
{
    mutex &m_;

public:
    lock(mutex &m)
      : m_(m)
    {
        m.acquire();
    }
    ~lock()
    {
        m_.release();
    }
};

// A class which uses 'mutex' and 'lock' objects
class foo
{
    mutex mutex_; // mutex for locking 'foo' object
public:
    void bar()
    {
        lock scopeLock(mutex_); // lock object.

        foobar(); // an operation which may throw an exception

        // scopeLock will be destructed even if an exception
        // occurs, which will release the mutex and allow
        // other functions to lock the object and run.
    }
};

DEMİRYOLU da nesneler diğer sınıfların üyeleri olarak kullanarak kolaylaştırır. Ne zaman sahibi sınıf " yok, kaynağı, DEMİRYOLU DEMİRYOLU sınıf tarafından yönetilen-yönetilen sınıfın yıkıcı bir sonucu olarak çağrılır çünkü serbest kalıyor. Bu demektir kullandığınızda DEMİRYOLU bütün üyeler için bir sınıf yönetmek kaynakları, yanına kar Kalır bir kullanarak bir çok basit, hatta belki de varsayılan, yıkıcı sahibi sınıf bu yana gerekmez el ile yönetmek üye kaynak ömürler. (İçin teşekkürlerMike Bbu işaret için.)

Bu tanıdık için C# ya da VB.NET, DEMİRYOLU .NET deterministic destruction using IDisposable and 'using' statements benzer olduğunu fark edebilirsiniz. Aslında, bu iki yöntem birbirine çok benziyor. Temel fark DEMİRYOLU kararlı bellek kaynak da dahil olmak üzere, her tür yayınlayacak. IDisposable uygulanması .NET (bile .NET dili C /CLİ), kaynakları kararlı bellek dışında piyasaya sürülecek. .NET, kararlı bellek serbest değil; yalnızca bellek çöp toplama döngüsü sırasında serbest bırakılır.

† Bazı insanlar "Yıkım Kaynağı Vazgeçme" DEMİRYOLU tabiri için daha doğru bir isim. inanıyorum

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DRDAnimation

    DRDAnimation

    28 EYLÜL 2012
  • How It Should Have Ended

    How It Shoul

    5 Mart 2007
  • jesiel santos

    jesiel santo

    15 Ocak 2009