Re[2]: Не вызывается деструктор
От: sanx  
Дата: 05.01.10 02:29
Оценка:
Спасибо за такой тщательный разбор. Вот что я решил:

1) Тут большенство просто моих ошибок, которые я постарался исправить;

2) Но есть кое-что, над чем вы мне просто посоветовали подумать.
Например строка с нулевой длинной. Я почему-то для себя решил что вместо [Указатель]->"/0", я буду делать [NULL-Указатель]. Мне кажется что так удобней, или могут быть какие нюансы? Хотя замечаю что некоторые функции НЕ присваивают null указателю, а заносят в буфер TEXT(""). Но тут понятно, я ведь им передал указатель на буфер и они не имеют право сделать Указатель = NULL, мне же нужно будет еще освободить память. Но если я сам выделяю память, так почему бы мне просто не выделять ее для пустой строки? Поэтому я решил что если мы передаем len = 0, то далее уже решим пустая ли строка с помощью указателя. Если он null то строка пустая. Далее, если он не null, но указывает на _T(""), то функция StringCchLength вернет нам нулевую длину, и мы опять же не будем выделять память. Мне кажется так удобней. Буду благодарен за ваше мнение!

3) И еще, зачем мне возвращать m_str?m_str:_T("") (пункт 4)? Ведь все функции прекрасно поймуть NULL в качестве аргумента? Или могут быть проблемы? Я этот класс пытаюсь сделать как readOnlyString, думаю что roString.Str() который вернет NULL вместо указателя на TEXT(""), не должно создавать проблем, или как?

4) По поводу конца строки, то вроде как StringCchCopy и StringCchCopyN вставляют символ ноль в конце. Ну я все же заменил на StringCchCopyN.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.