小编Yrc*_*chh的帖子

为什么QSharedPointer <T> :: create调用不完整对象的析构函数?

我有以下代码示例:

#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(从源代码构建)尝试了它.结果是一样的.

c++ qt c++11 qsharedpointer

8
推荐指数
1
解决办法
707
查看次数

标签 统计

c++ ×1

c++11 ×1

qsharedpointer ×1

qt ×1