Mam klasę, która ma obiekt boost::asio::io_service
. Chcę ten obiekt przechowywać w boost::shared_ptr
.Initialize Boost shared_ptr w konstruktorze
Więc mój nagłówek wygląda następująco (Pozbyłem się niepotrzebnego kodu, tak aby nie rozpraszać)
class CommandDispatcher
{
private:
boost::shared_ptr<boost::asio::io_service> m_ioservice;
public:
CommandDispatcher();
};
Kiedy teraz utworzyć obiekt CommandDispatcher
chcę, że obiekt io_service
być inicjowane przez wskaźnik. Teraz nie jestem do końca pewien, jak to zrobić. Sprawdziłem dwie różne rozwiązania, ale tylko jedna działa i nie jestem do końca pewna, czy to jest dobre. Ale zobaczyć na własne oczy:
CommandDispatcher::CommandDispatcher()
{
m_ioservice.reset(new boost::asio::io_service); // this actually works
//m_ioservice = boost::make_shared<boost::asio::io_service>
// (new boost::asio::io_service); // this doesn't work
}
więc wywołanie reset
działa, ale myślę, że ten jeden jest rzeczywiście przypisać wskaźnik. Więc to jest nie jest złe,, aby go użyć, ale nie wydaje mi się to najmilsze rozwiązanie dla mnie. Sugestia dla połączenia make_shared
znalazłem w innym pytaniu. Ale ten po prostu mi nie zadziała (zaimplementowałem go tak, jak opisano w oficjalnym przykładzie doładowania). I dostać
/usr/local/include/boost/smart_ptr/make_shared.hpp:189: error: invalid conversion from ‘boost::asio::io_service*’ to ‘size_t’
/usr/local/include/boost/smart_ptr/make_shared.hpp:189: error: initializing argument 1 of ‘boost::asio::io_service::io_service(size_t)’
nie jestem pewien, jak to zrobić teraz, co byłoby najlepszym sposobem (może jest kompletnym inna opcja to zrobić). A może robię to dobrze, ale dostaję coś z błędem io_service
.
Mam nadzieję, że to pytanie nie było już tutaj w ten sposób (szukałem starego pytania, ale odpowiedź nie wydawała mi się odpowiednia).
Dlaczego zmienne prywatne są wyświetlane przed publicznymi metodami? Z pewnością interfejs publiczny jest ważniejszy niż szczegóły dotyczące prywatnych implementacji? :) nit-picking> –
Cóż, faktycznie pomyślałem (i dowiedziałem się jakiś czas temu), że to "dobry ton", aby najpierw zadeklarować publiczne i prywatne zmienne członkowskie, a następnie zadeklarować publiczne i prywatne metody. – Toby
Myślę, że większość ludzi byłaby bardziej zainteresowana interfejsem publicznym, w przeciwieństwie do zmiennych, których używasz do jego osiągnięcia. –