Qt对象所有权内存泄漏
Qt object ownership memory leak
我正在阅读一本关于Qt的介绍书,我正在编写以下代码:
服务器.h
class server : public QObject {
Q_OBJECT
private:
QTcpServer* chatServer;
public:
explicit server(QObject *parent = nullptr) : QObject(parent) {}
//more code...
};
#endif // SERVER_H
然后这本书建议以这种方式创建对象:
chatServer = new QTcpServer(); //<-- ?)
chatServer->setMaxPendingConnections(10);
我在网上读到Qt有一个层次结构,因为一切都从QObject
开始,父对象将负责孩子们的生活。在这种情况下,代码不会产生内存泄漏吗?
因为chatServer = new QTcpServer();
等于chatServer = new QTcpServer(nullptr);
,所以我不是指定父级!所以没有人关心堆中这个对象的生命。我必须调用delete
(或者更好地使用unique_ptr(来管理内存吗?
我会使用的另一个修复程序是chatServer = new QTcpServer(server);
。这样可以吗?
如果这段代码确实是你书中显示的全部内容,那么你是正确的。如果不将父对象传递给QTcpServer
,则在对象销毁时不会自动删除它。你也可以在析构函数中手动执行,或者更好——只是不要使用指针,而是直接使用它(尽管如果你决定将对象移动到另一个线程,你可能需要使用指针(。
这似乎确实是内存泄漏。chatServer
应该将this
作为其父对象,因此它将自动与server
对象一起销毁:
chatServer = new QTcpServer(this);
chatServer->setMaxPendingConnections(10);
// ... more code
假设这发生在server
类的成员函数内部,则这将使QTcpServer
对象成为server
对象的父对象。
如果这本书没有提供动态分配QTcpServer
对象的具体理由,那么可能就没有必要了。在这种情况下,正如Dan M.所说,完全可以不使用指针,只使用QTcpServer chatServer
在您发布的示例中,您必须自己处理指针。
但是,您可能希望使用QObject的插槽deleteLater
,而不是调用delete
。
- C++功能泄漏内存,我是C++新手,不确定如何解决
- 我的堆栈弹出式磁带的实现是否泄漏内存?
- 将 c++ 向量转换为字符 ** 而不会泄漏内存
- 析构函数 C++ 使泄漏内存
- 构造函数对象赋值是否泄漏内存
- corba :: orb_init泄漏内存
- Gmock泄漏内存
- 如何在不泄漏内存的情况下删除链接列表
- Visual C ODBC关闭记录集泄漏内存
- 为什么泄漏内存比在动态数组上执行 delete[] 慢
- OpenGL正在泄漏内存.哪个对象未释放
- 可以std ::退出泄漏内存
- uiautomation findall泄漏内存
- 为什么在此OpenCL代码中泄漏内存,为什么要泄漏内存
- pthread在完成后会泄漏内存
- win32 标准::线程泄漏内存
- 返回指向同一变量的指针是否会泄漏内存
- 使用clectType(new any_type())可能会泄漏内存泄漏
- Windows开发:如何确定我的应用程序是否正在泄漏内存
- WinHttp打开泄漏内存