Trying to write simple code to simulate parsing packages in the factory. I am sending a package which is saved in the buffer like:
sending class:
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));
}
}
using function:
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();
}
}
While passing argument to the functon of an object:
`void Worker::receive_package(Package &&p) {
queue_pointer->push(std::move(p));
push_package(queue_pointer->pop());
}`
Package has moving operator defined as default:
Package& operator=(Package&&)= default;
The function below works fine while passing object like:
Package p;
receive_package(std::move(p));
It seems that the argument passed to the function in pointing on an empty place as follows:
Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)
Thank you in advance.