0

我需要确保传递给我的构造函数的某个指针不是NULL. 通常我只是Q_ASSERT()在函数的开头放一个这样的:

void Class::doStuff( Object *object )
{
    Q_ASSERT( object );
    // do stuff
}

但由于构造函数是一个特殊函数,我想知道这种技术是否符合规定。在这样的构造函数中使用 Q_ASSERT 有什么问题吗?

Class::Class( Object *object, QObject *parent = NULL ) 
    :
QObject( parent ),
_object( object )
{
    // make sure that object is not NULL
    Q_ASSERT( object );

    // do stuff that will dereference the pointer, hence it must not be NULL
    if( object->hasSomething() )
        // do stuff
}

NULL如果这是不好的做法,那么最好在施工时检查的正确方法是什么?

4

2 回答 2

3

Q_ASSERT在构造函数中使用是可以的。没有理由不这样做。它只是在输出中打印一条消息。

于 2013-06-14T17:12:19.883 回答
0

这实际上取决于您的代码将如何以及在何处使用。你是对的,构造函数是一个特殊的函数,最佳实践是

  1. 在其中用作最少的外部函数和调用(在您的代码库之外),并且
  2. 不要使用可能引发异常的调用。这是因为当抛出异常时,在退出您的应用程序并调用正确的 catch 调用之前,堆栈会展开以进行清理。

好吧,如果它在构造函数中,则该特定对象的状态对于已完成的操作以及需要清理的内容等都不清楚。因此,归根结底,您可以致电查看这是否是您的问题。

于 2014-04-29T18:57:50.410 回答