2010-12-06 17 views
0

Spが私のような機能を持っている:バッファをboost :: asio :: bufferに送信した後にバッファを削除する必要がありますか?

void WriteToUrl(const unsigned char *buf, int size) 
{ 
boost::asio::write(s, boost::asio::buffer(buf, size)); 
} 

は、私は他にどこ任意のそれを使用していない場合、私は、バッファを削除する必要がありますか?どのようにしてy関数後にクリーニングする必要がありますか?

答えて

4

私はあなたがいつもバッファ 'buf'の所有権を理解しています。同期操作では、:: writeを実行するとすぐに:: writeを終了してバッファを削除することができます。 as :: async_writeという非同期操作では、操作が完了したときに呼び出される非同期完了トークン(コールバック)を与える必要があります。あなたはこのコールバックでbufを削除することができます。

+0

えええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええと、 –

2

あなたが望む場合でも、削除できるバッファへのポインタはありません。

bufからの入力データは、Boost.Asio bufferの構築に使用され、その構築に使用されるメモリはライブラリによって管理されます。書き込み呼び出しはすべてのデータが書き込まれるまでブロックされるので、データは内部的にはコピーされないと思いますが、それについてはわかりません。

完了したら、コンストラクタ(buf)に与えたバッファで必要なクリーンアップを実行する必要があります。

+0

'buffer()'関数は 'mutable_buffer'オブジェクトを生成します。内部的には元のバッファへのポインタです。したがって、メモリはコピーされず、所有権も取得されません。 – Timo

+0

@Timo - ブロッキングコールのコンテキストで意味があります、ありがとう。 –

関連する問題