crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в вопрос про c++
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
igor_bogomolov Дата 28.9.2010, 18:36
  Порядок инициализации в конструкторах
Sokoloff Дата 28.9.2010, 16:47
 
Цитата(kwisp @ 28.9.2010, 16:00) *
Цитата(kilkinenator @ 28.9.2010, 13:55) *
а проблема моя в том что mIOServicePool.GetIOService() происходит раньше чем mIOServicePool(threads), понятно, что такой расклад неприятен))

по-моему, в каком порядке в обЪявлении класса члены идут в том порядке и инициализируются.

Да, это так, хотя это не очевидное поведение. Вот что пишет Страуструп:
Цитата(Бьерн Страуструп)
Списки параметров для членов отделяются друг от друга запятыми (а не двоеточиями), а список инициализаторов для членов можно задавать в произвольном порядке:
           classdef::classdef(int size)
               : friends(size), members(size), no_of_members(size)
           {
             // ...
           }
Конструкторы вызываются в том порядке, в котором они заданы в описании класса.

kwisp Дата 28.9.2010, 15:00
 
Цитата(kilkinenator @ 28.9.2010, 13:55) *
а проблема моя в том что mIOServicePool.GetIOService() происходит раньше чем mIOServicePool(threads), понятно, что такой расклад неприятен))

по-моему, в каком порядке в обЪявлении класса члены идут в том порядке и инициализируются.
kilkinenator Дата 28.9.2010, 13:08
 
Цитата(Алексей1153 @ 28.9.2010, 13:59) *
Но, если ошибаюсь, тебе поможет простая перестановка местами:

Server::Server(unsigned short port, int threads) :
    mAcceptor(mIOServicePool.GetIOService(), ip::tcp::endpoint(ip::tcp::v4(), port)), //<<<<<
    mIOServicePool(threads) //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
{
    mAcceptor.set_option(ip::tcp::acceptor::reuse_address(true));
}


нее, совсем не то))

Цитата(Алексей1153 @ 28.9.2010, 13:59) *
Насчёт порядка - щас лень проверять, но вроде в каком порядке члены в списке указаны, такая последовательность и будет.


вот это скорее всего так, так как изменение порядка и помогло мне. спасибо)
Алексей1153 Дата 28.9.2010, 12:59
  вообще -то, из контекста просто очевидно, что mIOServicePool и mAcceptor - это члены класса (так как в списке инициализаторов). Насчёт порядка - щас лень проверять, но вроде в каком порядке члены в списке указаны, такая последовательность и будет. Но, если ошибаюсь, тебе поможет простая перестановка местами:

Server::Server(unsigned short port, int threads) :
    mAcceptor(mIOServicePool.GetIOService(), ip::tcp::endpoint(ip::tcp::v4(), port)), //<<<<<
    mIOServicePool(threads) //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
{
    mAcceptor.set_option(ip::tcp::acceptor::reuse_address(true));
}

kilkinenator Дата 28.9.2010, 12:55
  итак, есть кусочек кода, тупо срисованый с примера буста:
   
Server::Server(unsigned short port, int threads) :
    mIOServicePool(threads),
    mAcceptor(mIOServicePool.GetIOService(), ip::tcp::endpoint(ip::tcp::v4(), port))
{
    mAcceptor.set_option(ip::tcp::acceptor::reuse_address(true));
}

а проблема моя в том что mIOServicePool.GetIOService() происходит раньше чем mIOServicePool(threads), понятно, что такой расклад неприятен))

З.Ы. я понимаю, что есть простые решения моей проблемы, но очень хочется разобраться что да почему

Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 9:57