Как включить boost:: shared_ptr <> в ссылку (&)?
Итак, у меня есть класс, который использует ссылки (&) с такими функциями, как
void request(tcp::socket& socket);
Я начинаю переносить весь свой код на boost::shared_ptr<tcp::socket>
, но мне бы очень хотелось узнать, как превратить мои shared_ptrs в ссылки, чтобы быть способным сделать мой код развитым функцией по функциям, а не на одной итерации, меняющей все, что у меня есть shared_ptr. Итак, как превратить shared_ptr в ссылку?
Ответы
Ответ 1
Во-первых, они не называются ссылками, а ссылками.:)
Во-вторых, 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
Ответ 2
boost::shared_ptr<tcp::socket> sock;
...
if (sock) request( *sock )
Я думаю, что лучше переписать request()
(если можно), чтобы он мог обрабатывать boost::shared_ptr
или общие указатели.