Вход на сайт
C++ Frage zur Speicherverwaltung
634 просмотров
Перейти к просмотру всей ветки
в ответ 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();}
Банальный вопрос - а почему это плохо?
В чем вообще разница между указателем и референц?
В обоях случаях передаётся адресация поля.
Falls ich davon ausgehe, dass mir die flache Kopie völlig ausreicht, dann erfüllt es
ihren Zweck.
Насчёт существования этой версии
const axis2_char_t *Options::getActionField(){ return (axis2_char_t *) strdup( ms_address_field->c_str() );}
я очень сомневаюсь.
Думаю что знаем. Аллокация произошла с new std::string значит delete[].
Конечно плохо то что потом указатель указывает на поле которого позже может и не быть.
Конечно это только мои доводы. С этим языком я не настолько знаком ...
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 *)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[]
Соотвественно мы не знаем, что мы должны делать с данным указателем, то ли потереть его с помощью free, то ли с помощью delete[]
Думаю что знаем. Аллокация произошла с new std::string значит delete[].
Конечно плохо то что потом указатель указывает на поле которого позже может и не быть.
Конечно это только мои доводы. С этим языком я не настолько знаком ...