Переменная, указывающая на пустое пространство при передаче агентов с использованием std :: move из std :: необязательного буфера - PullRequest
0 голосов
/ 22 декабря 2019

Попытка написать простой код для симуляции парсинга пакетов на заводе. Я отправляю пакет, который сохраняется в буфере, например:

класс отправки:

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)

Заранее спасибо.

...