Исключение xstring boost.asio
У меня есть клиент-серверная архитектура. В логике сервера создается класс Session под каждого нового подключившегося клиента. В классе Session имеется shared_ptr на класс CommunicationHandler который отвечает за методы общения с клиентом ( sendPacket, recvPacket и прочие )
Так выглядит CommunicationHandler.h:
#pragma once
#ifndef COMMUNICATION_HANDLER_H
#define COMMUNICATION_HANDLER_H
#include <memory>
#include <boost/asio.hpp>
class CommunicationHandler : public std::enable_shared_from_this<CommunicationHandler>
{
public:
CommunicationHandler(boost::asio::ip::tcp::socket& socket);
void test();
private:
boost::asio::ip::tcp::socket socket;
};
#endif // !COMMUNICATION_HANDLER_H
CommunicationHandler.cpp:
#include "communicationhandler.h"
CommunicationHandler::CommunicationHandler(boost::asio::ip::tcp::socket& socket)
: socket(std::move(socket)) {
}
void CommunicationHandler::test() {
std::string string = "hello, client";
auto self(shared_from_this());
boost::asio::async_write(this->socket, boost::asio::buffer(string), [self](boost::system::error_code errorCode, std::size_t bytes) {
});
}
При попытке использовать метод test() я получаю исключение
Я плохо разбираюсь в умных указателях и во времени жизни объектов, имею только малое представления об этих понятиях поэтому решить данный вопрос самому не получается.
p.s передача числовых значений не вызывает никаких исключений, клиент получает данные
Ответы (1 шт):
Автор решения: soamane
→ Ссылка
void CommunicationHandler::test() {
auto self(shared_from_this());
std::string string = "hello, client";
// Создаем временный буфер, копируя данные из локальной переменной string
auto buffer = std::make_shared<std::string>(string);
boost::asio::async_write(this->socket, boost::asio::buffer(*buffer), [self, buffer (boost::system::error_code errorCode, std::size_t bytes) {
});
}