У меня есть класс, у которого есть boost::asio::io_service
объект.Я хочу, чтобы этот объект хранился в boost::shared_ptr
.
Так что мой заголовок выглядит следующим образом (я избавился от ненужного кода, чтобы он не отвлекал)
class CommandDispatcher
{
private:
boost::shared_ptr<boost::asio::io_service> m_ioservice;
public:
CommandDispatcher();
};
Когда я сейчассоздать объект CommandDispatcher
Я хочу, чтобы объект io_service
был инициализирован для указателя.Теперь я не совсем уверен, как это сделать.Я посмотрел два разных решения, но работает только одно, и я не совсем уверен, хорошее ли оно.Но убедитесь сами:
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
}
Итак, вызов reset
работает, но я думаю, что на самом деле этот вызов на самом деле переназначает указатель.Так что это не неправильно использовать его, но это не кажется мне лучшим решением.Предложение для звонка make_shared
я нашел в другом вопросе.Но этот просто не будет работать для меня (я реализовал это, как описано в официальном примере надстройки).Я получаю
/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)’
Я не совсем уверен, как это сделать сейчас, что будет лучшим способом (возможно, есть полныйдругой вариант это сделать).Или, может быть, я все делаю правильно, но я что-то получаю с io_service
неправильно.
Надеюсь, что этот вопрос еще не был здесь таким образом (я посмотрел старый вопрос, но нетмне показалось, что ответ подходит).