SP我有這樣一個功能:發送到boost :: asio :: buffer後需要刪除緩衝區嗎?
void WriteToUrl(const unsigned char *buf, int size)
{
boost::asio::write(s, boost::asio::buffer(buf, size));
}
我是否需要刪除緩衝區,如果我不使用任何它還有什麼地方? y功能後如何清潔?
SP我有這樣一個功能:發送到boost :: asio :: buffer後需要刪除緩衝區嗎?
void WriteToUrl(const unsigned char *buf, int size)
{
boost::asio::write(s, boost::asio::buffer(buf, size));
}
我是否需要刪除緩衝區,如果我不使用任何它還有什麼地方? y功能後如何清潔?
如果我明白你總是緩衝區'BUF'的所有權。通過同步操作:: :: write,只要:: write完成,就可以刪除緩衝區。使用異步操作:: async_write,您需要提供一個異步完成標記(回調函數),該操作完成後將被調用。你可以在這個回調中刪除buf。
即使您想要,您也沒有指向可以刪除的緩衝區的指針。
來自buf
的輸入數據用於構建Boost.Asio buffer
,然後在該構造中使用的存儲器由該庫管理。寫入調用會阻塞,直到寫入所有數據,所以我想數據不會在內部複製(但我不確定)。
當你完成這個任務後,你當然應該對你給構造函數(buf
)的緩衝區執行任何所需的清理。
`buffer()`函數創建一個`mutable_buffer`對象,它在內部只是一個指向原始緩衝區的指針。所以沒有內存被複制,並且不佔用所有權。 – Timo 2010-12-06 19:37:27
@Timo - 在阻塞調用的情況下有意義,謝謝。 – 2010-12-06 19:43:14