构造函数中止构造

sta*_*tor 2 c++ constructor

我想在遇到某些错误代码时让构造函数中止对象构造(例如,如果遇到以下情况):

CudaObj::CudaObj(InsertionSim *theSim)
{
    // Setup
    if(cublasInit() == CUBLAS_STATUS_NOT_INITIALIZED) {
        printf("CUBLAS init error.\n");
        return -1;  // abort here rather than return a value
    }

        ...
}
Run Code Online (Sandbox Code Playgroud)

完成此任务最简单的方法是什么?是异常处理吗?

Ara*_*raK 16

我认为惯用的方法是从构造函数中抛出异常以强调对象不处于有效状态.

  • @Twisol.public init()方法不是一个好主意.应用RAII,一旦构造函数完成而没有抛出,该对象就存在.如果使用init方法,则在构造函数之后和init()之前,您有一个有效对象(在语言术语中)和一个无效对象(在业务逻辑术语中).用户通常无法调用init().我很高兴您更喜欢init之外的异常版本 (7认同)
  • 那,或将易错代码拆分为成员init()函数.就个人而言,我会采用例外的方式,但知道你的选择是很好的. (3认同)