ЭТОТ ВОПРОС ЗАКРЫТ, ПОТОМУ ЧТО ОН НЕ ВИДИТ РЕАЛЬНОГО ВОПРОСА К НЕКОТОРЫМ ЛЮДЯМ С тех пор я обновил тело вопроса и, может быть, сейчас он немного лучше. Тем не менее, я ожидаю, что вы все предложите, как я могу улучшить этот вопрос, так как это моя работа и исследования в этой области.
Теория RAII (распределение ресурсов — инициализация) гласит, что если я заимствую память у MMU, мне нужно вернуть ее обратно (new и delete). Тем не менее, мне было интересно, что последствия будут, если я буду делать плохие практики инициализации в C ++.
Что если я сделаю следующее:
double* pp1 = 0;
double* pp2 = 0;
А потом использовать pp1 и pp2 где-то мне нужно? Это неправильный способ инициализации указателя в соответствии со стандартной практикой программирования? Или это вообще инициализация. Зависит ли полностью инициализация от new
оператор?
И сколько нужно использовать указателей в дизайне, который:
1) в режиме реального времени
2) Критическая безопасность
3) Миссия Критическая
Кроме того, я нахожу странные результаты при запуске одного и того же приложения C / C ++ на 32-разрядных и 64-разрядных компьютерах. Насколько сильно моя машина станет медленной / неэффективной, если я буду возиться с указателями. Потому что моя машина работает медленно из-за слишком большого количества указателей в моем дизайне. Для некоторых «очевидных» соглашений о неразглашении я не могу разместить здесь свой код. Я так сожалею об этом. И для ясности, я удаляю все указатели, используемые в каждом методе, непосредственно перед тем, как вернуть результаты, т. Е. Мое управление памятью хорошо сбалансировано и достаточно эффективно, чтобы не вызывать проблемы переполнения стека.
Я знаю, что эти вопросы могут быть слишком открытыми, но я также изучаю (Google, MISRA C ++, Британское компьютерное общество и IEEE), чтобы найти подробный ответ. Моя идея состоит в том, чтобы на самом деле исследовать и разработать способ программирования на C ++ без частого использования указателей.
Я знаю, что очевидный ответ таков: «Вы программируете на C ++, так что вы можете использовать указатели и перестать злоупотреблять MMU вашего ПК». Но если у кого-то есть другие мысли, я хотел бы услышать об этом.
Что было бы наиболее подходящей практикой использования указателей?
В этом случае ответ будет не использовать их вообще. Что не так с просто
double p1 = 1.1;
double p2 = 2.2;
Защита от утечек памяти с помощью умного указателя:
std::unique_ptr<double> pp1;
nullptr
:предпочитать nullptr
над NULL
или же 0
:
double* pp1 = nullptr;
double* pp2 = nullptr;
Вы не можете разыменовать указатель, пока не сделаете так, чтобы он указывал на правильное местоположение:
pp1 = new double(1.1);
*pp1; //VALID
*pp2; //UNDEFINED BEHAVIOR - pp2 is still nullptr
Других решений пока нет …