我有以下代码示例:
#include <QCoreApplication>
#include <QSharedPointer>
#include <QDebug>
#include <memory>
class A
{
public:
A()
{
throw 1;
}
~A() { qDebug() << "A destr"; }
};
int main(int argc, char* argv[])
{
QCoreApplication a(argc, argv);
try
{
//auto m1 = std::make_shared<A>();
auto m2 = QSharedPointer<A>::create();
}
catch (...)
{
qDebug() << "catch!";
}
return a.exec();
}
Run Code Online (Sandbox Code Playgroud)
上面代码的输出是:
A destr
catch!
Run Code Online (Sandbox Code Playgroud)
但如果我取消注释std::make_shared输出的行是如下:
catch!
Run Code Online (Sandbox Code Playgroud)
那么为什么要QSharedPointer::create调用不完整对象的析构函数呢?这是一个错误还是我错过了什么?
我用MSVC2013+ Qt 5.5.1和MSVC2015+ Qt 5.6(从源代码构建)尝试了它.结果是一样的.