Тест на знання C++
Квітень 28th, 2009
Життя підкинуло цікаву ідею для перевірки практичних навичок C++ програміста. Таке собі тестове завдання.
Нижче наведено клас — зв’язаний список, призначений для зберігання всяких різних об’єктів. Клас поганий, нормальний С++ програміст такого собі дозволяти не повинен. Як ви гадаєте, що саме недобре у цьому класі?
-
class Linked_Lists
-
{
-
public:
-
Linked_Lists();
-
~Linked_Lists();
-
bool add(void *data);
-
bool remove_head();
-
bool first();
-
bool last();
-
bool next();
-
bool prev();
-
void* get_data();
-
bool is_empty();
-
int get_count();
-
-
protected:
-
struct Node
-
{
-
void *data;
-
Node *prev_node;
-
Node *next_node;
-
};
-
Node *head;
-
Node *tail;
-
Node *current;
-
int count;
-
};
Слід сказати, тут дещо специфічний дизайн, так уже сталося. Елементи додаються та видаляються зі списку за принципом FIFO. Водночас, доступний вказівник, який можна туди-сюди пересувати по списку, щоб отримати доступ до будь-яких даних. Втім, це не суттєво. Припустимо, так було потрібно для чогось.
Справжній недолік цього класу в іншому. У якості підказки варто глянемо на реалізацію деструктора:
-
Linked_Lists::~Linked_Lists()
-
{
-
Node *node;
-
-
if (head == 0) return;
-
-
first();
-
do
-
{
-
node = current;
-
next();
-
delete node->data;
-
delete node;
-
} while (current != 0);
-
}
Що ж саме у ньому не так? (ще…)
Категорії: C/C++ | Теґи:c/c++, програмування | Кометарів немає




