2015-01-14 11 views
1

Я использую OpenSplice DDS 6.4 OSS edition с C++ (привязки C++ 11). Если я попытаюсь установить по умолчанию экземпляр темы и отправить его, возможно, изменив некоторые из его полей, я получаю исключения за нарушение прав доступа где-то в кишках писателя. Является ли это ошибкой, или это предполагаемое поведение, когда построенный по умолчанию объект недопустим?Можно опубликовать опубликованный по умолчанию тип типа DDS?

IDL, который я использую, имеет много союзов в нем, которые могут иметь отношение к вырубке.

+0

Какой язык программирования вы используете? –

+0

Извините, должен был сказать, я использую C++. – Pete

+0

Как раз так я могу избежать его в следующий раз, почему downvote? – Pete

ответ

0

Отображение IDL to C++ языка говорит следующее об инициализации по умолчанию союзов

Конструктор объединения по умолчанию не выполняет приложения видимой инициализации союза. Он не инициализирует дискриминатор и не инициализирует членов профсоюза в состоянии, полезном для приложения. (Реализация конструктора по умолчанию может сделать любой тип инициализации он хочет, но такая инициализация зависит от конкретной реализации. Нет совместимое приложение не может рассчитывать на объединение когда-либо должным образом инициализируется конструктором по умолчанию один.)

Поэтому небезопасно создавать инициализированный экземпляр темы по умолчанию и отправлять его на провод.

Так же, как ссылки, отображение IDL to C++11 языка говорит следующий конструктор объединение

по умолчанию инициализирует соединение. Если задан случай по умолчанию, объединение инициализируется в этом случае по умолчанию. Если союз имеет неявный член по умолчанию, он инициализируется в этом случае. Во всех остальных случаях он инициализируется как пустой. Присвоение, копирование, перемещение и уничтожение построенных по умолчанию профсоюзов безопасны.