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

  • Boiler Room

    Boiler Room

    10 Mayıs 2012
  • Brendan van Son

    Brendan van

    5 Aralık 2006
  • Miles Fisher

    Miles Fisher

    8 NİSAN 2009