Я рекомендую избегать std::wstring
в Windows или в другом месте, за исключением случаев, когда это требуется интерфейсом, или где-нибудь рядом с вызовами Windows API и соответствующими преобразованиями кодировки в качестве синтаксического сахара.
Мой взгляд обобщен в http://utf8everywhere.org , из которых я являюсь соавтором.
Если ваше приложение не ориентировано на API, например. в основном приложение UI, рекомендуется хранить строки Unicode в std :: string и кодироваться в UTF-8, выполняя преобразование около вызовов API. Преимущества, изложенные в статье, перевешивают явное раздражение конверсии, особенно в сложных приложениях. Это вдвойне подходит для многоплатформенной и библиотечной разработки.
И теперь, отвечая на ваши вопросы:
Хорошо, я нашел проблему для этого.
У меня есть класс Client, который действует как оболочка для моих соединений Socket.IO. Давайте назовем это ClientClass. В ClientClass у меня есть частный статический экземпляр ClientClass, доступ к которому возможен только через вызов статического метода getInstance () класса.
Во время закрытия соединения я забыл установить его в null как так:
public void close() {
socket.emit("bye");
socket.off();
socket.disconnect();
socket.close();
roomName = null;
socket = null;
instance = null; //I forgot this line
}
Это довольно странная проблема, которую сложно отладить по ошибкам, которую невозможно отследить, просто прочитав журналы ошибок.