можно ли так делать с auto_ptr?
От: Nickolas Чехия  
Дата: 15.02.04 16:05
Оценка:
//hostAddress — какой-то самопальный String

auto_ptr<char> host(new char[conf.hostAddress.length()+1]);
strncpy(&(*host), conf.hostAddress, conf.hostAddress.length());

и если так можно — то нельзя как-нить покрасивше?
Re: можно ли так делать с auto_ptr?
От: Batiskaf Израиль http://www.mult.ru/
Дата: 15.02.04 16:32
Оценка:
Здравствуйте, Nickolas, Вы писали:


N>//hostAddress — какой-то самопальный String


N>auto_ptr<char> host(new char[conf.hostAddress.length()+1]);

N>strncpy(&(*host), conf.hostAddress, conf.hostAddress.length());

N>и если так можно — то нельзя как-нить покрасивше?


Пользоваться нормальным std::string. И еще, авто поинтеры не принято применять в качестве контейнеров ( в твоем случае ходер массива ), открой имплементацию класса auto_ptr и загляни в дистрактор. В данном примере ничего страшного не произойдет, но если бы речь шла о массиве структур/классов, то при разрушении холдера в его дистракторе вызывался бы дистрактор твоей структуры/класса только для первого эелемента массива.
Will I live tomorrow? Well I just can't say
But I know for sure — I don't live today.
Jimi Hendrix.
Re[2]: можно ли так делать с auto_ptr?
От: Nickolas Чехия  
Дата: 15.02.04 16:45
Оценка:
Здравствуйте, Batiskaf, Вы писали:

B>Здравствуйте, Nickolas, Вы писали:



N>>//hostAddress — какой-то самопальный String


N>>auto_ptr<char> host(new char[conf.hostAddress.length()+1]);

N>>strncpy(&(*host), conf.hostAddress, conf.hostAddress.length());

N>>и если так можно — то нельзя как-нить покрасивше?


B>Пользоваться нормальным std::string.

С прибольшим бы удовольствием Но есть третья библиотечка, функции которой требуют char*, т.е. string я не могу им передать. Или я ошибаюсь?

например int connect( char * host );

у меня есть Str host, который может только в const char* кастить. Использовать const_cast не хочется.

Могу я что-то сделать со string?

>>И еще, авто поинтеры не принято применять в качестве контейнеров ( в твоем случае ходер массива ), открой имплементацию класса auto_ptr и загляни в дистрактор. В данном примере ничего страшного не произойдет, но если бы речь шла о массиве структур/классов, то при разрушении холдера в его дистракторе вызывался бы дистрактор твоей структуры/класса только для первого эелемента массива.


Спасибо, про это я знаю.
Re[3]: можно ли так делать с auto_ptr?
От: Кодт Россия  
Дата: 15.02.04 16:50
Оценка:
Здравствуйте, Nickolas, Вы писали:

B>>Пользоваться нормальным std::string.

N>С прибольшим бы удовольствием Но есть третья библиотечка, функции которой требуют char*, т.е. string я не могу им передать. Или я ошибаюсь?

N>например int connect( char * host );


N>у меня есть Str host, который может только в const char* кастить. Использовать const_cast не хочется.


N>Могу я что-то сделать со string?


Хак, основанный на предположении, что строка хранится сплошняком: &(str[0])
Стандарт не требует, чтобы элементы строки хранились подряд (функция c_str() может синтезировать массив на лету), но вроде бы все реализации — сплошные.
... << RSDN@Home 1.1.2 stable >>
Перекуём баги на фичи!
Re: можно ли так делать с auto_ptr?
От: ArtDenis Россия  
Дата: 15.02.04 16:55
Оценка: 3 (1)
Здравствуйте, Nickolas, Вы писали:

N>auto_ptr<char> host(new char[conf.hostAddress.length()+1]);

N>strncpy(&(*host), conf.hostAddress, conf.hostAddress.length());
Так нельзя делать. auto_ptr не предназначен для работы с массивами.

N>и если так можно — то нельзя как-нить покрасивше?

Для массивов есть boost::scoped_array

А в твоём случае, как посоветовал Batiskaf, лучше всего применить std::string или std::vector<char>
... << RSDN@Home 1.1.2 stable >>
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[4]: можно ли так делать с auto_ptr?
От: ArtDenis Россия  
Дата: 15.02.04 17:01
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Хак, основанный на предположении, что строка хранится сплошняком: &(str[0])

К>Стандарт не требует, чтобы элементы строки хранились подряд (функция c_str() может синтезировать массив на лету), но вроде бы все реализации — сплошные.

Про ф-цию c_str() надо говорить в начале ответа. А потом мелким шрифтом написать про хак &(str[0])

И вообще, если стандарт не гарантирует что-то, то подобных решений лучше не предлагать.
... << RSDN@Home 1.1.2 stable >>
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[5]: можно ли так делать с auto_ptr?
От: Nickolas Чехия  
Дата: 15.02.04 17:08
Оценка:
Здравствуйте, ArtDenis, Вы писали:

AD>Здравствуйте, Кодт, Вы писали:


К>>Хак, основанный на предположении, что строка хранится сплошняком: &(str[0])

К>>Стандарт не требует, чтобы элементы строки хранились подряд (функция c_str() может синтезировать массив на лету), но вроде бы все реализации — сплошные.

AD>Про ф-цию c_str() надо говорить в начале ответа. А потом мелким шрифтом написать про хак &(str[0])


AD>И вообще, если стандарт не гарантирует что-то, то подобных решений лучше не предлагать.


Спасибо за советы
Остановился на vector<char>.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.