首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在构造函数中使用Q_ASSERT

在构造函数中使用Q_ASSERT
EN

Stack Overflow用户
提问于 2013-06-15 01:03:00
回答 2查看 839关注 0票数 0

我需要确保传递给构造函数的某个指针不是NULL。通常我只在函数的开头放一个Q_ASSERT(),如下所示:

代码语言:javascript
复制
void Class::doStuff( Object *object )
{
    Q_ASSERT( object );
    // do stuff
}

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

代码语言:javascript
复制
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的正确方式是什么呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-15 01:12:20

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

票数 3
EN

Stack Overflow用户

发布于 2014-04-30 02:57:50

这真的取决于如何以及在哪里使用你的代码。您说得对,构造函数是一个特殊的函数,最佳实践是

使用

  1. 作为最低限度的外部函数和调用(在代码库之外),
  2. NOt使用可能引发异常的调用。这是因为当抛出异常时,在退出应用程序并调用适当的catch调用之前,会发生堆栈展开以清理堆栈。

嗯,如果它在一个构造函数中,那么这个特定对象的状态并不清楚已经做了什么,需要清理什么之类的。所以归根结底,这是你的决定,看看这在你的情况下是否是一个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17113711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档