0
我是C++新手,無法理解一些行爲。 有以下功能,在這種情況下,它的工作原理。C++可變可視範圍和strems
bool Network::doRequest(HTTPRequest& request, string path, string content) {
HTTPResponse response;
istream* respStreamPtr;
session->sendRequest(request);
respStreamPtr = &session->receiveResponse(response);
if (response.getStatus() == HTTPResponse::HTTP_UNAUTHORIZED)
{
credentials->authenticate(request, response);
session->sendRequest(request);
respStreamPtr = &session->receiveResponse(response);
}
if (response.get("Content-Encoding") == "deflate") {
Poco::InflatingInputStream inflater(*respStreamPtr);
respStreamPtr = &std::istream(inflater.rdbuf());
Logger::dumpStream(*respStreamPtr);
}
return true;
}
但如果搬移字串記錄儀::轉存(* respStreamPtr);超出了if塊。像這樣:
if (response.get("Content-Encoding") == "deflate") {
Poco::InflatingInputStream inflater(*respStreamPtr);
respStreamPtr = &std::istream(inflater.rdbuf());
}
Logger::dumpStream(*respStreamPtr);
這是停止工作! 條件(response.get(「Content-Encoding」)==「deflate」)始終爲真; 因此,塊中可見性流內容的麻煩。 但我不明白我做錯了什麼。 請幫助我。
P.S.在這兩種情況下都不例外。在第二種情況下,文件somefile.txt中沒有數據。 在第一種情況下,文件somefile.txt從http請求中獲得了充足的數據。
void Logger::dumpStream(std::istream& inputStream) {
fstream outStream("somefile.txt", ios_base::trunc | ios_base::out | ios_base::binary);
outStream << inputStream.rdbuf();
outStream.close();
}
指針本身變成搖晃,實際上_immediately_。任何其他編譯器,但VS會禁止這種非標準的代碼。不要採取臨時的地址。 –
謝謝你如此快速的迴應。 請主動更新主要問題。 添加新語句inflater = new。 現在它可以工作。 但現在我有一個內存泄漏,因爲我不刪除膨脹對象? – greenif
@greenif請不要編輯問題。這個問題得到了回答。如果您還有其他問題,請發一個新帖子。 –