Общий вопрос, касающийся правильного способа реализации структуры данных словаря

#c #c #data-structures

#c #c #структуры данных

Вопрос:

в любой структуре данных словаря есть функция add_to_ds, которая получает данные, необходимые для вставки в качестве параметра. вопрос заключается в следующем: должен ли add_to_ds получить объект самостоятельно (тип T) и выполнить выделение памяти, или add_to_ds должен получить указатель на объект и просто вставить указатель (тип T *, тот, кто использует DS, выполняет выделение памяти).

как правильно это сделать и почему?

Комментарии:

1. Подробности, пожалуйста. На каком языке? Как выглядит текущая реализация?

2. @Oded Я не знаю, действительно ли это имеет значение, но я работаю с C / C , и я имею в виду структуры данных, такие как связанный список, двоичное дерево, список пропусков и т.д. ‘

3. Ну, это важно, потому что вы говорите об указателях. Не все языки поддерживают их, вы знаете.

4. вы правы (так как сказано, что это C, C )

Ответ №1:

В целом не существует правильного / неправильного способа сделать это. Если вы доверяете вызывающей стороне не изменять память, вы можете сохранить указатель. Однако, если вы не укажете это в своем интерфейсе, вам придется дублировать память.

  • Если вы позволите им вводить указатели, они будут отвечать за освобождение памяти, не касаясь ее и т. Д
  • Если вы не доверяете им, вам придется освободить память, вам придется возвращать копии сохраненных элементов (в противном случае, если вы вернете свой указатель, они могут освободить его / изменить его)

Комментарии:

1. @Belgi Если вы не хотите, чтобы это снизило производительность, просто сообщите клиентам, что они будут заблокированы, если они освободят / изменят данные.

2. Постарайтесь вообще не доверять своим пользователям / программистам. Таким образом вы напишете гораздо лучший и безопасный код.