My question why (look at the topic)?
Here is call stack:
Qt5Widgetsd.dll!QScopedPointer<QObjectData,QScopedPointerDeleter<QObjectData> >::data() Line 132 C++
Qt5Widgetsd.dll!qGetPtrHelper<QScopedPointer<QObjectData,QScopedPointerDeleter<QObjectData> > >(const QScopedPointer<QObjectData,QScopedPointerDeleter<QObjectData> > & p) Line 886 C++
Qt5Widgetsd.dll!QApplication::d_func() Line 222 C++
Qt5Widgetsd.dll!QWidget::~QWidget() Line 1432 C++
Qt5Widgetsd.dll!QMainWindow::~QMainWindow() Line 379 C++
test.exe!MainWindow::~MainWindow() Line 36 C++
test.exe!`MainWindow::instance'::`2'::`dynamic atexit destructor for 'inst''() C++
msvcr110d.dll!doexit(int code, int quick, int retcaller) Line 585 C
msvcr110d.dll!exit(int code) Line 395 C
test.exe!__tmainCRTStartup() Line 549 C
test.exe!mainCRTStartup() Line 377 C
kernel32.dll!76f9336a() Unknown
[Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll]
ntdll.dll!77d49f72() Unknown
ntdll.dll!77d49f45() Unknown
Here is simple code that reproduce this problem:
#include <QApplication>
#include <QMainWindow>
#include <QWidget>
#include <QScopedPointer>
#include <QMenuBar>
#include <QMenu>
class MainWindowPrivate {
public:
MainWindowPrivate()
: m_widget( 0 )
{
}
QWidget * m_widget;
};
class MainWindow
: public QMainWindow
{
Q_OBJECT
private:
MainWindow( QWidget * parent = 0, Qt::WindowFlags f = 0 )
: QMainWindow( parent, f )
, d( new MainWindowPrivate )
{
init();
}
~MainWindow()
{
}
public:
static MainWindow & instance()
{
static MainWindow inst;
return inst;
}
private:
void init()
{
QMenu * fileMenu = menuBar()->addMenu( tr( "&File" ) );
fileMenu->addAction( QIcon(),
tr( "E&xit" ), qApp, SLOT( quit() ),
QKeySequence( tr( "Ctrl+Q" ) ) );
d->m_widget = new QWidget( this );
setCentralWidget( d->m_widget );
}
private:
Q_DISABLE_COPY( MainWindow )
QScopedPointer< MainWindowPrivate > d;
};
int main( int argc, char ** argv )
{
QApplication app( argc, argv );
MainWindow::instance().show();
return app.exec();
}
#include "main.moc"
↧