У меня есть класс, в котором есть объект 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: недопустимое преобразование из boost :: asio :: io_service * в size_t
/ usr / local / include /boost/smart_ptr/make_shared.hpp:189: ошибка: инициализация аргумента 1 'boost :: asio :: io_service :: io_service (size_t)'
Я не совсем уверен, как это сделать сейчас, что могло бы быть лучший способ (может быть, есть совершенно другой вариант). Или, может быть, я делаю все правильно, но что-то не так с io_service
.
Надеюсь, этого вопроса здесь уже не было (я поискал какой-то старый вопрос, но ответ, похоже, мне не подошел).