#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. Постарайтесь вообще не доверять своим пользователям / программистам. Таким образом вы напишете гораздо лучший и безопасный код.