2015-03-02 48 views
2

QTcpSocket * QTcpServer::nextPendingConnection() [virtual]如何安全地刪除QT :: QTcpSocket?

套接字作爲服務器的子級,這意味着它是當QTcpServer既可對象被銷燬 自動刪除創建。這是 仍然是一個好主意,當你完成 與明確刪除對象,以避免浪費內存。

在我的應用程序,一個QTcpServer生活很長一段時間(從主機斷開連接時關閉,但從來沒有銷燬,除非退出程序),它接受了很多QTcpServer::nextPendingConnection並採取了很多的內存。

在切換到下一個掛起的存儲器之前,應該如何刪除舊的QTcpSocket對象,同時避免雙重刪除?

delete ok在這種情況下?

回答

3

刪除ok在這種情況下?

是的,這要歸功於Qt的對象設計的巧妙。

特別是與QTcpSocket導出(最終)的對象,QObject的析構函數方法在結尾處包含此代碼:

if (d->parent)  // remove it from parent object 
    d->setParent_helper(0); 

所以刪除與QTcpSocket對象會被自動從孩子列表中刪除與QTcpSocket它的父對象(在這種情況下是QTcpServer),所以當QTcpServer對象被銷燬時不會出現雙重刪除。