alexey_ma вы наверное очень умный, но, имхо, это не значит, что это даёт Вам право [внимательно\вовсе] НЕ читать посты других участников.
Цитата:
Сообщение от alexey_ma
Локальная структура уничтожается когда она выходит из скопа. Для неё вызывается деструктор в котором освобождается указатель str.
|
Во первых, вы уже сами поняли, что лок. переменная до возникновения неправильного вывода из скопа не выходила, но об этом написано начиная с первого поста:
Цитата:
Сообщение от crazy_kettle
ведь переменная s и вектор vec ещё используются (не говоря уже об области видимости)
|
Писалось также, что я специально принял меры, чтобы избежать "пагубного" влияния вызова деструктора для переменной s. В первом посте (в виде комментария) и в посте
http://www.imho.ws/showpost.php?p=1119412&postcount=8:
Цитата:
Сообщение от crazy_kettle
Да при окончании программы вызывается деструктор для строки. Но т.к. s.str==NULL, то ф-ция free(s.str) НИЧЕГО не делает, а, значит, можно считать, что для структуры s деструктор вовсе отсутствует
|
Я понимаю, что это решения может быть галимым, но тогда нужно, имхо, это решение и обсуждать, а не говорить то, что мне и так понятно (хотя Вы мне в этом не верите

).
Это так было сказано к слову и не значит, что я горю расжигать перебранку.
Цитата:
Сообщение от PSyton
Цитата:
Сообщение от Crazy_kettle
STL разрабатывалась/писалась так, чтобы обеспечивать максимальное быстродействие.
|
Да ну?
|
От стандартной библиотеки не просто требуется выполнять свои задачи, она также должна выполнять их достаточно эффективно, чтобы у пользователя не позникло соблазна использовать совственные механизмы. (Страуструп. Язык С++. 2002 год. стр. 487). И ещё где-то он писал, что перед тем, чтобы думать, что ваше средство эффективнее стандартного, проведите широкомаштабное исследование.
Цитата:
Сообщение от PSyton
Если у тебя 100 объектов, то ты можешь начихать на это, поскольку при современных скоростях это тьфу. К тому же при написании больших проектов, далеко не все упирается в скорость, но также еще и в возможность поддежки и расширения.
|
С одной стороны Вы правы, но с другой, хочется, уже сейчас заботится об эффективности. Более того, что я писал не большой проект, а прогу для себя (хоть и не маленькую). И мне хотелось её побыстрее склепать.
Цитата:
Сообщение от PSyton
А почему бы не использовать std::string вместо этой убогой структуры?
|
В данном примере Вы несомненно правы. Но здесь приведён не кусок того исходного кода

(было выловлено место ошибки и написан специально под неё пример). Конечно, в программе можно было заменить все char* на string, но это решено было не делать по следующим причинам:
1) (уже писалось почему) Решено было использовать стандартную библиотеку С и WinAPi для работы с файлами и каждый раз конвертить string в char* надоело бы, да и неизвестно мне насколько это эффективно
2) Нельзя использовать string::c_str() для изменения, что доставляло бы хлопот при работе с нек. функциями, например с fwrite.
3) В этом случае возможны ненужные выделения памяти