У меня есть класс, который имеет объект boost::asio::io_service
. Я хочу, чтобы этот объект хранился в boost::shared_ptr
.Инициализировать 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
.
Надеюсь, что этот вопрос еще не был здесь (я поднял какой-то старый вопрос, но никакой ответ мне не подходит).
Почему частные переменные перечислены перед публичными методами? Разумеется, публичный интерфейс более важен, чем частные детали реализации? :) nit-picking> –
Ну, я действительно подумал (и узнал некоторое время назад), что это «хороший тон», чтобы сначала объявить переменные public и private member, а затем объявить публичные и частные методы. – Toby
Я думаю, что большинство людей больше интересуется публичным интерфейсом, в отличие от того, какие переменные вы используете для его достижения. –