2

我班上的构造函数检查某些情况。在某些情况下,它应该中断对象的创建。我应该放一个析构函数还是只返回语句?

它是这样的:

代码中的某处:

new Obj( string );

和我的构造函数:

Obj::Obj( string ) {
    if( string == "something" ) {
        // should I put this here or only return?
        Obj::~Obj();
        return;
    }
    // ...
}

我知道我可以在创建对象之前检查条件,但我只是想知道它是否正确(如果没有内存泄漏),因为它编译得很好而不会在运行时崩溃。

4

2 回答 2

10

也不,你应该抛出一个异常。

不会创建任何对象,这是处理这种情况的惯用方式。

您需要在调用上下文(或更高版本)中处理异常。

Obj::Obj( string ) {
    if( string == "something" ) {
        // should I put this here or only return?
        throw ObjectCouldNotBeCreatedException();
    }
}
于 2012-07-31T19:13:06.503 回答
4

return语句仍将创建对象。为了中断构造,您应该抛出异常。

于 2012-07-31T19:14:30.263 回答