Cet exemple simple ne parvient pas à compiler VS2K8:Comment utiliser correctement boost :: make_shared_ptr?
io_service io2;
shared_ptr<asio::deadline_timer> dt(make_shared<asio::deadline_timer>(io2, posix_time::seconds(20)));
Comme le fait celui-ci:
shared_ptr<asio::deadline_timer> dt = make_shared<asio::deadline_timer>(io2);
L'erreur est:
erreur C2664: « boost :: asio :: basic_deadline_timer :: basic_deadline_timer (boost :: asio :: io_service &, const boost :: posix_time :: ptime &) ': impossible de convertir le paramètre 1 à partir de' const boost :: asio :: io_ service » à 'boost :: asio :: io_service &'
Excellent, merci! Je n'avais aucune idée de boost :: ref. A-t-il été créé en partie pour contourner ce genre de choses ou y a-t-il d'autres utilisations? – ApplePieIsGood
@Apple: Il a été conçu à peu près pour cette raison. Par exemple, 'boost :: thread' fera une copie de ses arguments pour le nouveau thread, mais si vous voulez réellement passer une référence' boost :: ref' fonctionne aussi. Il est utilisé chaque fois que vous voulez passer une référence, mais la fonction a l'intention de faire une copie. – GManNickG