і команди - власне виділення пам'яті потрібного розміру і копіювання в неї символів рядка. Це можна розглядати як дрібне незручність. p align="justify"> Наступна проблема набагато серйозніша - ви повинні звільнити явно виділену динамічну пам'ять, тобто викликати операцію delete.
Програмістам на C + + добре відомі різні прийоми, які дозволяють вирішити дану проблему - наприклад, використання класів auto_ptr <> і string з STL. Оскільки ідея у всіх таких підходах одна - В«загорнутиВ» покажчик на захищається ресурс в деяку оболонку, яка і виконує всі необхідні дії - то компілятор idl2cpp просто генерує таку оболонку. Це і є _var-клас. Майте на увазі - _var-класи здатні управляти різними ресурсами, а не обов'язково пам'яттю. Наприклад, вони часто використовуються для правильного ведення лічильника посилань. p align="justify"> З використанням класу CORBA :: String_var, той же приклад можна записати так:
Стиль CORBA для C + +:
CORBA :: String_var str = CORBA :: string_dup ("My string");
str = CORBA :: string_dup ("My anither string");
Ніякої витоку пам'яті тут не буде: пам'ять, зайнята в першому рядку, буде автоматично звільнена як частина операції привласнення, а пам'ять, зайнята у другому рядку, буде звільнена деструктором класу CORBA :: String_var.класси виконують і інші дуже корисні сервісні функції.
Рядки
Рядки CORBA бувають двох видів - В«необмеженіВ» (unbounded) і В«обмеженіВ» (bounded). Різниця між ними полягає в тому, що обмежені рядки не можуть бути більше явно вказаної довжини. Хоча більшість реалізацій відображення рядків IDL на C + + ігнорує це розходження, завжди слід мати його на увазі. p align="justify"> Синтаксис завдання рядків дуже простий:
typedef string MyAliasForString; string <20> BoundedString_20;
typedef wstring MyAliasForWideString;
Використовувати typedef в загальному випадку необов'язково - все залежить від того, в якому місці IDL-файлу з'являються такі оголошення.
Компілятор idl2cpp генерує класичні типи даних C + + - char * або wchar_t *, і, крім того, об'єктні оболонки навколо покажчиків - _var-і _out-класи. Out-класи зручно використовувати при роботі з методами, які повертають результат через список аргументів цього методу. p align="justify"> Деякі особливості має управління динамічною пам'яттю для рядків. Використання new і delete може (потенційно) привести до неузгодженості засобів, що використовуються прикладним додатком і ORB му. Щоб уникнути цієї проблеми, потрібно використовувати не new, а CORBA :: string_alloc () або CORBA :: string_dup (), і не delete, а CORBA :: string_free ().
Масиви
Під масивом...