SORU
1 Mayıs 2009, Cuma


Kurucular gelen atma istisnalar

İm kurucular istisnalar atmak için co-işçi ile bir tartışma sahip ve bazı geribildirim istiyorum düşündüm.

Kurucular istisnalar atmak Tamam, bakış tasarım noktası mudur?

Diyelim ki bir sınıfta bir posıx zaman uyumu sarma değilim, bu gibi bir şey olurdu.

class Mutex {
public:
  Mutex() {
    if(pthread_mutex_init(&mutex_,0)!=0) {
      throw MutexInitException();
    }
  }

  ~Mutex() {
    pthread_mutex_destroy(&mutex_);
  }

  void lock() {
    if(pthread_mutex_lock(&mutex_)!=0) {
      throw MutexLockException();
    }
  }

  void unlock() {
    if(pthread_mutex_unlock(&mutex_)!=0) {
      throw MutexUnlockException();
    }
  }

private:
  pthread_mutex_t mutex_;
};

Benim sorum, bu standart yolu yapmak? eğer pthread mutex_init çağrı dışlama nesne kullanılamaz durumda başarısız olursa, çünkü çok atan bir durum, zaman uyumu oluşturulmuş olmayacak sağlar.

Fonksiyonu başlatma bool pthread dayalı dönecekti içinde mutex_init dönüş mutex_init bir üye oluşturmak tercih etmeliyim? Bu şekilde bu kadar düşük seviye bir nesne için özel durumlar kullanmak zorunda değilim.

CEVAP
1 Mayıs 2009, Cuma


Evet, başarısız yapıcı bir özel durum üretiliyor bunu yapmanın standart yoludur. Daha fazla bilgi için Handling a constructor that fails Bu SSS okuyun. Bir init() yöntemi de çalışır, ama zaman uyumu nesne oluşturur herkes init hatırlamak vardır () " olması gerekiyor. RAII ilkesine aykırı hissediyorum.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • LIVESTRONG.COM

    LIVESTRONG.C

    5 EKİM 2005
  • Marissah Simonini

    Marissah Sim

    25 HAZİRAN 2013
  • MofoHifi Records

    MofoHifi Rec

    15 HAZİRAN 2006