Исключение 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) {

    });
}
→ Ссылка