-
Bug
-
Resolution: Done
-
P3: Somewhat important
-
5.4.2
-
None
-
Windows 7, MSVC 2012
-
d1210281e41008ce2e3510aa5cfb3ebea1c57734
QSharedPointer::create() improperly calls the destructor when the constructor throws an exception.
#include <QSharedPointer>
class MyClass
{
public:
MyClass()
{
qDebug("MyClass");
throw std::exception();
}
~MyClass()
{
qDebug("~MyClass()");
}
};
int main(int argc, char *argv[])
{
try
{
QSharedPointer<MyClass> withCreate = QSharedPointer<MyClass>::create();
}
catch (const std::exception&)
{
}
try
{
QSharedPointer<MyClass> withoutCreate( new MyClass() );
}
catch (const std::exception&)
{
}
}
The output is:
MyClass() ~MyClass() MyClass()
The output should be:
MyClass() MyClass()
- replaces
-
QTBUG-51017 QSharedPointer<T>::create calls T::~T even when T::T throws
-
- Closed
-
| For Gerrit Dashboard: QTBUG-49824 | ||||||
|---|---|---|---|---|---|---|
| # | Subject | Branch | Project | Status | CR | V |
| 191756,7 | Fix undefined behavior in QSharedPointer::create() | 5.8 | qt/qtbase | Status: MERGED | +2 | 0 |