Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 这可能是Qt';什么是SQL数据库类?_C++_Multithreading_Qt_Qtsql - Fatal编程技术网

C++ 这可能是Qt';什么是SQL数据库类?

C++ 这可能是Qt';什么是SQL数据库类?,c++,multithreading,qt,qtsql,C++,Multithreading,Qt,Qtsql,我遇到了这个问题中提到的一个问题: 在我做了一些研究并询问了我的一些朋友之后。我发现 QSqlDatabase可能是问题所在 事情是这样的: QSQLDABASE的默认构造函数使用了一个共享的null。 请注意,shared_null是一个表示无效数据库的对象,而不是一个普通的null指针 代码如下: 您可以在函数中看到这些是静态变量,并且-静态变量初始化不是线程安全的 见: 因此,如果您在不同的线程中调用这些默认构造函数,可能会有问题,在我的例子中,我怀疑由于这种争用条件,shared_nu

我遇到了这个问题中提到的一个问题:

在我做了一些研究并询问了我的一些朋友之后。我发现 QSqlDatabase可能是问题所在

事情是这样的: QSQLDABASE的默认构造函数使用了一个共享的null。 请注意,shared_null是一个表示无效数据库的对象,而不是一个普通的null指针

代码如下:

您可以在函数中看到这些是静态变量,并且-静态变量初始化不是线程安全的

见:

因此,如果您在不同的线程中调用这些默认构造函数,可能会有问题,在我的例子中,我怀疑由于这种争用条件,shared_null被初始化了两次。结果,ref计数出错,对这个静态对象调用了delete(不应该是可删除的)


我是Qt的新手,有人对此有什么好主意吗

静态变量初始化在C++0x1中是线程安全的如果您的代码没有处理线程锁定,是的,这在C++03中不是线程安全的,并且您不能假设您的客户将如何编译您的代码…但问题是,我使用的是Qt的预构建库…如果是这种情况,为什么它仍然发生?因为从我掌握的所有证据来看,它指向了这个答案。