Как превратить boost :: shared_ptr <> в ссылку (&)? - PullRequest
11 голосов
/ 14 апреля 2011

Итак, у меня есть класс, который использует ссылки (&) с такими функциями, как

void request(tcp::socket& socket); 

Я начинаю перенос всего своего кода на boost::shared_ptr<tcp::socket>, но мне бы очень хотелось узнать, как превратить мои shared_ptrs вссылки, чтобы быть в состоянии заставить мой код развиваться функция за функцией, а не за одну итерацию, изменяя все, что я имею в shared_ptr.Итак, как превратить shared_ptr в ссылку?

Ответы [ 2 ]

13 голосов
/ 14 апреля 2011

Во-первых, это не ссылки, а ссылки. :)
Во-вторых, boost::shared_ptr можно просто разыменовать как обычный указатель:

boost::shared_ptr<tcp::socket> p(new tcp::socket());
// can be done in two steps (dereference, pass)
tcp::socket& socket_ref = *p;
request(socket_ref);
// or one step
request(*p);
//      ^ -- dereference the shared_ptr
1 голос
/ 14 апреля 2011
boost::shared_ptr<tcp::socket> sock;

...

if (sock) request( *sock )

Я думаю, что лучше переписать request() (если можете), чтобы он мог обрабатывать boost::shared_ptr или общие указатели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...