Попытка написать простой код для симуляции парсинга пакетов на заводе. Я отправляю пакет, который сохраняется в буфере, например:
класс отправки:
class PackageSender {
public:
void send_package();
std::optional<Package> get_sending_buffer();
void push_package(Package&&);
std::optional<Package> sending_buffer;
public:
ReceiverPreferences receiver_preferences;
};
void PackageSender::push_package(Package &&p) {
if(!sending_buffer){
sending_buffer.emplace(std::move(p));
}
}
с использованием функции:
void PackageSender::send_package() {
IPackageReceiver* receiver=receiver_preferences.choose_receiver(); //choose receiver from a list
if(sending_buffer.has_value())
{
receiver->receive_package(std::move(sending_buffer.value());
sending_buffer.reset();
}
}
При передаче аргумента в функциюобъект:
`void Worker::receive_package(Package &&p) {
queue_pointer->push(std::move(p));
push_package(queue_pointer->pop());
}`
В пакете по умолчанию определен оператор перемещения:
Package& operator=(Package&&)= default;
Приведенная ниже функция работает нормально при передаче объекта, например:
Package p;
receive_package(std::move(p));
Кажетсячто аргумент передается функции при указании на пустое место следующим образом:
Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)
Заранее спасибо.