Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

C++ Frage zur Speicherverwaltung

18.12.08 18:38
Re: C++ Frage zur Speicherverwaltung
 
evgher постоялец
evgher
в ответ femidav 18.12.08 17:02
функция возвращает указатель на внутренности поля.
ms_address_field как указатель на стринг можно конечно заменить и на сам стринг - и вместо
const axis2_char_t *Options::getActionField(){ return (axis2_char_t *)ms_address_field->c_str();}
вернуть
const axis2_char_t *Options::getActionField(){ return (axis2_char_t *)ms_address_field.c_str();}
In Antwort auf:

Это плохо. Ещё того хуже, что эти внутренности возвращаются в виду указателя.

Банальный вопрос - а почему это плохо?
В чем вообще разница между указателем и референц?
В обоях случаях передаётся адресация поля.
Falls ich davon ausgehe, dass mir die flache Kopie völlig ausreicht, dann erfüllt es
ihren Zweck.
In Antwort auf:

const axis2_char_t *Options::getActionField(){ return (axis2_char_t *)ms_address_field->c_str();}
или так:
const axis2_char_t *Options::getActionField(){ return (axis2_char_t *) strdup( ms_address_field->c_str() );}

Насчёт существования этой версии
const axis2_char_t *Options::getActionField(){ return (axis2_char_t *) strdup( ms_address_field->c_str() );}
я очень сомневаюсь.
In Antwort auf:

Соотвественно мы не знаем, что мы должны делать с данным указателем, то ли потереть его с помощью free, то ли с помощью delete[]

Думаю что знаем. Аллокация произошла с new std::string значит delete[].
Конечно плохо то что потом указатель указывает на поле которого позже может и не быть.
Конечно это только мои доводы. С этим языком я не настолько знаком ...
 

Перейти на