Тема: Less Toolkit
Показать сообщение отдельно
Старый 26.01.2009, 17:02   #17 (Ссылка на пост)
Marchello
Местные мы
 
Аватар для Marchello
Пол:
 
Активность Longevity
0/20 17/20
Today Сообщения
0/5 ssssss509
Благодарил(а): 457
Благодарили 620 раз в 179 постах
Галерея: 0
Вес репутации: 23 Marchello известное всем имяMarchello известное всем имяMarchello известное всем имяMarchello известное всем имяMarchello известное всем имя
(обращение к Лестеру)
Так, посмотрел я массив. Я конечно не гуру Срр, но осмелюсь высказаться ))
Ну сразу - объявление всего класса как макроса конечно интересно...
дебажить невозможно, да и пользоваться неудобно (я чуть-чуть попробовал )) ).
Нужно где-то тулить DECLARE_ARRAY, потом DEFINE_ARRAY, а потом и саму переменную объявить.
Почему бы просто не написать шаблонный класс сразу? (собственно как vector<>).
Тогда пишем CustomArray<MyType> A; и готово. Может я не усмотрел где-то глубинный смысл задумки, но добавлять макросы в проект для каждого нового типа - реально неудобно.
Ладно.., дальше:
Код:
 T& operator[]( size_t index );
 T   operator[]( size_t index ) const;
Почему второй метод (константный) возвращает это, а не const T& ?
Ведь с константной ссылкой мы ничего не поменяем в классе name и в T - и это не нарушит иммутабельность. Вот этот момент хотелось бы подробней знать.
Потом еще момент, есть конструктор который принимает указатель и кол-во элементов и создает массив.
Так вот ИМХО не помешало бы и такой метод иметь.
Например я создал массив (твой), поработал с ним, удалил все с него,
а потом хочу туда засунуть уже готовый массив (типа int a[64]) -
прийдется уже по одному делать Add(). То есть, можно добавить метод типа:
Код:
void FillFrom(size_t count, T* value );
ну это не критично конечно.
И последнее, метод Export, строка:
Код:
for( size_t i = 0 ; i < count ; ++i ) 
    res[ i ] = (T) ( mVector[ i ] );
Опять таки, почему (Т) ?
Ведь даже оператор присваивания принимает const name&, а так выходит что создается временный объект - он попадает в оператор присваивания, а потом удаляется.
И тут же момент, обычно Срр-шники юзают new/delete, а тут память выделяется через malloc, если этого не знать а потом вызвать
указателю delete [] - сам знаешь что будет. Но хотя если там написать
res = new T[count] - повызываются лишний раз конструкторы, тоже не хорошо.

ps. это я смотрел там на первый класс name (а то там внизу еще один есть, дома погляжу...)

Последний раз редактировалось Marchello, 26.01.2009 в 17:06.
Marchello вне форума  
Ответить с цитированием
Сказали Спасибо пользователю Marchello за этот пост:
Lester (26.01.2009)