Допустим, у меня есть функция IDL:
void foo(out Data d);
Когда я наследую сгенерированный код, подпись будет выглядеть примерно так:
void foo(IDL::Data_out d);
Мой первый вопрос: что мне нужно передать на стороне клиента? Я попытался:
IDL::Data_out d;
_servantRef->foo(d);
но это не работает, потому что Data_out не имеет конструктора по умолчанию. Затем я попытался:
IDL::Data* d;
_servantRef->foo(d);
но теперь компилятор не может выполнить преобразование из IDL::Data* в IDL::Data_out. Следующее работает, но выглядит слишком сложным и, следовательно, неправильным:
IDL::Data* d(NULL);
IDL::Data_out do(d);
_servantRef->foo(do);
Как я должен исходить оттуда? Во время выполнения foo() сервант в какой-то момент выделит объект данных следующим образом:
void Servant::foo(IDL::Data_out d)
{
d = new Data();
}
Затем я удалю объект после использования его на стороне клиента следующим образом:
IDL::Data* d(NULL);
IDL::Data_out do(d);
_servantRef->foo(do);
delete d;
Это хотя бы правильно по задумке или это по другому работает? Был бы признателен за небольшую помощь или указатели на документацию, где это описано понятным образом.