Почему мои данные в связанном списке изменяются / портятся во вложенных функциях?

Рядом с проблемами производительности есть еще один очень важный вопрос, который я бы назвал легкостью и расширяемостью кода.

Если T - это POD, и вы начинаете предпочитать список инициализации, тогда, если одно время T будет измените на не-POD-тип, вам не нужно ничего менять во время инициализации, чтобы избежать ненужных вызовов конструктора, потому что он уже оптимизирован.

Если тип T имеет конструктор по умолчанию и один или несколько пользовательских конструкторы и один раз, когда вы решите удалить или скрыть значение по умолчанию, тогда, если был использован список инициализации, вам не нужно обновлять код, если ваши пользовательские конструкторы, потому что они уже правильно реализованы.

с константными членами или ссылочными элементами, скажем, изначально Т определяется следующим образом:

struct T
{
    T() { a = 5; }
private:
    int a;
};

Затем вы решили квалифицировать a как const, если бы вы использовали список инициализации с самого начала, тогда это было однострочное изменение, но с T, как указано выше, также требуется выкопать конструктор defi для удаления назначения:

struct T
{
    T() : a(5) {} // 2. that requires changes here too
private:
    const int a; // 1. one line change
};

Не секрет, что техническое обслуживание намного проще и менее подвержено ошибкам, если код был написан не «обезьяной кода», а инженером, который принимает решения на основе более глубоких рассмотрение того, что он делает.

0
задан Andreas 28 March 2019 в 03:29
поделиться

1 ответ

Код вопроса в этой строке:

newPtr = &dep;

Вы должны изменить его на

*newPtr = dep;

, поскольку dep определено в буфере стека, после выполнения функции generateProcessDeparture, буфер стека будет перезаписан.

0
ответ дан ccxxshow 28 March 2019 в 03:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: