это действительно зависит от того, откуда поступают аргументы, и каковы ваши намерения с этими аргументами.
если вы знаете, что строки, передаваемые в качестве аргумента, всегда доступны в течение всего времени существования вашего связанного списка,и что они не изменены и не освобождены, или что нет функции, которая бы имела какой-либо побочный эффект, влияющий на ваш связанный список, тогда вы можете просто скопировать указатель и не потрудиться скопировать всю строку.
если что-либо из вышеперечисленного неверно (под этим я подразумеваю также, если вы не знаете ответ на один из вышеперечисленных вопросов), тогда будет безопаснее скопировать всю строку.
некоторые конкретные примеры:
вы разрабатываете небольшое приложение, которое читает файл CSV, сохраняет значения в связанном списке для сортировки, а затем записывает значения обратно в файл XML: у вас есть контроль надвсе время жизни ваших строк, вам не нужно их копировать.
вы пишете библиотеку связанных списков, возможнораспространяются в сети, возможно, используются сотнями людей, работающих во всех областях: вы не знаете, что будет передано в вашу библиотеку, вы не знаете, освободит ли пользователь библиотеки строку перед тем, как манипулировать связаннымисписок, затем вы копируете всю строку.
также обратите внимание, что этот вид проектного решения где-то лучше задокументирован: вы как разработчик должны дать понять, что ваша функция будет хранитьуказатель без копирования строки, или что вы скопируете строку и вам потребуется еще один вызов функции для освобождения памяти.(это называется разработка по контракту : вы заключаете договор между кодом, использующим вашу функцию, и самой функцией, вам лучше уважать его, или у вас возникнут проблемы, в виде повреждения данных илисбой программного обеспечения).Один из возможных способов прояснить ваше намерение - использовать правильно размещенное ключевое слово const
.