在构造函数中使用Q_ASSERT

时间:2013-06-14 17:03:00

标签: c++ qt constructor qt4 assert

我需要确保传递给我的构造函数的某个指针不是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的正确方法是什么,最好是在施工时?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

这实际上取决于您的代码的使用方式和位置。你是对的,构造函数是一个特殊的函数,最佳实践是

  1. 用作最小外部函数和调用(代码库之外)和
  2. 不使用可能会引发异常的调用。这是因为当抛出异常时,在退出应用程序并调用正确的catch调用之前,正在清理正在清理的堆栈。
  3. 好吧,如果它在构造函数中,那个特定对象的状态对于已经完成的事情以及需要清理的事情等都不清楚。因此,在一天结束时,您可以打电话询问是否存在问题。