2010-12-06 82 views

Répondre

4

Si j'ai bien compris, vous êtes toujours propriétaire du tampon 'buf'. Avec les opérations synchrones, comme :: write, vous pouvez supprimer le buffer dès que: write finish. Avec les opérations asynchrones, as :: async_write, vous devez donner un jeton d'achèvement asynchrone (callback) qui sera appelé lorsque l'opération aura été effectuée. Le vous pouvez supprimer le buf dans ce rappel.

+0

Bonne réponse ++, cependant la première phrase ne semble pas complète, pouvez-vous la reformuler à votre sens? –

2

Vous ne disposez pas d'un pointeur vers le tampon que vous pourriez supprimer, même si vous le souhaitez.

Les données d'entrée de buf sont utilisées pour construire le Boost.Asio buffer, puis la mémoire utilisée dans cette construction est gérée par la bibliothèque. L'appel en écriture bloque jusqu'à ce que toutes les données soient écrites, donc j'imagine que les données ne sont pas copiées en interne (mais je ne suis pas sûr de cela).

Vous devez bien sûr effectuer tout nettoyage requis sur la mémoire tampon que vous avez fournie au constructeur (buf) lorsque vous en avez terminé avec.

+0

La fonction 'buffer()' crée un objet 'mutable_buffer' qui est en interne juste un pointeur vers le tampon d'origine. Donc, aucune mémoire n'est copiée, et elle ne prend pas la propriété. – Timo

+0

@Timo - cela a du sens dans le contexte d'un appel de blocage, merci. –