Poco :: Net :: HTTPClientSession генерирует исключение без unique_ptr

Если проблема заключается в дополнительном времени компиляции и раздувании бинарного размера, полученном путем компиляции .h как части всех используемых им .cpp-модулей, во многих случаях то, что вы можете сделать, - это сделать класс шаблона опустившимся из не-шаблонного базовый класс для не зависящих от типа частей интерфейса, и что базовый класс может иметь свою реализацию в файле .cpp.

1
задан greenif 3 March 2019 в 16:50
поделиться

1 ответ

HTTP::HTTP(const string& adress)
{
  Poco::URI uri(
    adress.substr(0, 4) == "http" ? adress : "http://" + adress
  );

  HTTPClientSession session{ uri.getHost(), uri.getPort() };
}

Последняя строка в этом конструкторе создает локальную переменную с именем session, ... которая немедленно уничтожается при возвращении конструктора и не имеет ничего общего с членом класса того же члена.

Итак, когда все сказано и сделано, член session этого экземпляра класса остается неинициализированным. Для сравнения:

session = HTTPClientSession{ uri.getHost(), uri.getPort() };

Вместо этого правильно будет инициализироваться член класса, как было указано в вашем очевидном намерении. Однако, поскольку HTTPClientSession не имеет пригодного для использования оператора присваивания, ваша единственная возможность - либо продолжать использовать unique_ptr, либо реструктурировать конструктор так, чтобы он создавал член класса в своем списке инициализатора.

0
ответ дан Sam Varshavchik 3 March 2019 в 16:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: