Не совсем ... только если объект содержит только поля базового типа и другие структуры с полями базового типа. Если вы отправите указатель, его нельзя будет повторно использовать с другой стороны, если он находится в другом процессе или в другой системе.
Также используя классы с наследованием и виртуальные методы, это может быть беспорядок!
Лучше добавить метод Serialize с моей точки зрения.
Также передача сериализованного таким образом двоичного файла структуры вообще не переносима и может привести к нескольким проблемам, если вы захотите использовать тот же механизм с другими системами или если вы измените структуру или такие вещи, как упаковка объекта.
Пользовательская сериализация \ десериализация предпочтительнее и более переносима, но, конечно, выбор за вами.
Что-то вроде ...
template<typename T>
int SerializeAndSendObject(mqd_t mqdes, const T* instance)
{
MySerializationStream stream;
instance->SerializeTo(stream);
mq_send(stream.toBuffer(), stream.size());
}
Если вы просто отправляете между двумя потоками, а не отправляете содержимое объекта, я отправляю только указатель на объект, выделенный с новым, и я освобождаю его с другой стороны.
Будьте осторожны, когда вы располагаете очередь, вы должны сначала уничтожить все ожидающие объекты!
Object* pointer = &obj;
mq_send(mqdes, static_cast<char*>(pointer), sizeof(Object*), 1);
Обратите внимание на sizeof (Object *) ... вам нужно отправить только указатель, а не сам объект.