我正在与一位同事讨论如何从构造函数中抛出异常,并认为我需要一些反馈。
从设计的角度来看,可以从构造函数中抛出异常吗?
可以说我将POSIX互斥体包装在一个类中,它看起来像这样:
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_;
};
我的问题是,这是标准的做法吗?因为如果pthread mutex_init调用失败,则互斥对象不可用,因此抛出异常可确保不会创建互斥。
我是否应该为Mutex类创建一个成员函数init并pthread mutex_init在其中进行调用以基于返回值返回布尔值pthread mutex_init?这样,我不必为如此低级的对象使用异常。
慕仙森
蛊毒传说
慕姐4208626
相关分类