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

  • Chriselle Lim

    Chriselle Li

    26 Ocak 2008
  • hitcreatormusic2

    hitcreatormu

    21 Mayıs 2010
  • SignatureSeries

    SignatureSer

    24 Aralık 2006