2012-04-27 11 views
2

すべてのアップロードをキャンセルできるアプリケーションで作業する。 QNAMからのすべての返信を捜し求めなければならないのか、単にそれを削除して、それらのすべてが中止することを期待しなければならないのだろうか?QNetworkAccessManagerデストラクタは現在のリクエストを中止しますか?

文書には中止については何も記載されていませんが、私はそれを前提としています。

QNetworkAccessManagerオブジェクトを破棄し、リソースを解放します。このクラスから返されるQNetworkReplyオブジェクトには、このオブジェクトが親として設定されていることに注意してください。つまり、QObject :: setParent()を呼び出さないと削除されます。

EDIT: は(また、その上の所有権を取得し、retrysなどし)、そのデストラクタの信号が中断としてaswell QNetworkReplysを切断し、両方のすべての応答のラッパーを使用して終了。それはラッパー(親 - >子)とともに削除されます

答えて

2

それは単に返信を削除します。ソースから:

QNetworkAccessManager::~QNetworkAccessManager() 
{ 
    // ... 

    qDeleteAll(findChildren<QNetworkReply *>()); 

    // ... 
} 

QNetworkReplyのデストラクタは空ですので、手動で中止する必要があります。

+0

ええと私はそれを十分に認識しているので、文書に記載されています。 QNAMを削除する前にすべての返信(すべてのアップロードをキャンセル)を中断しなければならないのかどうか疑問に思っていましたか? – chikuba

+0

@chikuba QNetworkReplyデストラクタのソースに 'abort()'を呼び出すものは何もありません。 – Anthony

+0

@chikuba - それ以外の場合は、もはや有効ではないポインタを使用しようとしているので、そうです。こんにちは、未定義の動作。 –

関連する問題