Re: Почему нет std::string::operator const char*()
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 30.11.01 06:11
Оценка: 4 (1)
Здравствуйте Brother, Вы писали:

B>Внимание, вопрос!

B>Какой хороший (простой и очевидный) пример показал бы глубину грехопадения тех, кто склонен считать, что std::string::operator const char*() — это хорошо

П.Халперн."Стандартная библиотека С++ на примерах":

Весь вопрос в том, кто потом будет освобождать память.

вариант 1. Мы сами, ручками. Смотрим что из этого получится:

extern void f(const char*);
std:string s("hello world");
f(s); // f() принимает временный, неименованый указатель - > мы не сможем освободить память по этому адресу


вариант 2. Память будет очищать сам string

extern void f(const char*);
extern std:string g();
const char* p = g(); // !! std:string возвращаемый g() 
                     // сохраняется во временной переменной string
f(p); // большой облом ! после выхода за строку 3 
      // временная переменная string уничтожается 
      // и очищает память, на которую указывает p. 
      // Что же мы передали в f()?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.