C++ 未调用QT析构函数
我对qt控制台应用程序有问题,MyServer类的析构函数没有被调用。 以下是我的简化代码:C++ 未调用QT析构函数,c++,qt,C++,Qt,我对qt控制台应用程序有问题,MyServer类的析构函数没有被调用。 以下是我的简化代码: #include <QtCore/QCoreApplication> #include "MyServer/myserver.h" int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); MyServer server; server.startServer(); return
#include <QtCore/QCoreApplication>
#include "MyServer/myserver.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
MyServer server;
server.startServer();
return a.exec();
}
myserver.cpp
MyServer::MyServer(QObject *parent)
: QTcpServer(parent)
{
file = new QFile("file.ini",this);
}
MyServer::~MyServer()
{
QSettings settings(file->fileName(), QSettings::IniFormat, this);
settings.beginGroup("testGroup");
settings.setValue("testValue", "asdf");
settings.endGroup();
}
析构函数应该更改file.ini,但它没有更改。
MyServer::file
可能是您的问题。您是否在代码的其他地方打开该文件以进行写访问?因为QSettings
将尝试同时打开同一个文件,并且您对同一文件的两次并发访问可能会破坏其内容
如果你什么都不需要
MyServer::file
,那就把它扔掉QSettings
不需要QFile
。它只需要文件名。MyServer::file
可能是您的问题。您是否在代码的其他地方打开该文件以进行写访问?因为QSettings
将尝试同时打开同一个文件,并且您对同一文件的两次并发访问可能会破坏其内容
如果你什么都不需要
MyServer::file
,那就把它扔掉QSettings
不需要QFile
。它只需要文件名。您是如何验证未调用~MyServer()
的?文件编辑过程:)能否显示该过程或类似的重现问题的过程?试着打个比方,否则我们只能猜测。你用了new
,所以你被搞砸了。拆下它,事情就会正常工作。(没有调用的不是~MyServer()
,而是~QFile()
)在析构函数中放置断点或打印一些内容。您是如何验证没有调用~MyServer()
的?文件编辑过程:)能否显示该过程或类似的重现问题的过程?试着打个比方,否则我们只能猜测。你用了new
,所以你被搞砸了。拆下它,事情就会正常工作。(没有调用的不是~MyServer()
,而是~QFile()
)在析构函数中放置断点或打印一些内容。
MyServer::MyServer(QObject *parent)
: QTcpServer(parent)
{
file = new QFile("file.ini",this);
}
MyServer::~MyServer()
{
QSettings settings(file->fileName(), QSettings::IniFormat, this);
settings.beginGroup("testGroup");
settings.setValue("testValue", "asdf");
settings.endGroup();
}