Желательно ли всегда указывать указатель на память кучи как `const`? - PullRequest
10 голосов
/ 05 июня 2011
T *p = new T();

Для указателя на кучу могут быть катастрофические операции, такие как,

p++;  // (1) scope missed
p = new T(); // (2) re-assignment

, которые могут привести к утечкам памяти или сбоям из-за неправильного delete.Помимо использования умных указателей, желательно всегда сделать указатель кучи const;

T* const p = new T();  // now "p" is not modifiable

Этот вопрос касается поддержания хорошей практики программирования и стиля кодирования.

Ответы [ 4 ]

7 голосов
/ 05 июня 2011

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

2 голосов
/ 05 июня 2011

Существует одна потенциальная проблема, с которой я сталкиваюсь:

после delete вы должны установить указатель в NULL, чтобы (помочь) предотвратить его использование в других частях кода.

Const не позволит вам сделать это.

2 голосов
/ 05 июня 2011

Стесняюсь сказать всегда , но то, что вы предлагаете, кажется разумным для многих / большинства случаев. Правильность констант - это то, на что большинство людей C ++ обращают немало внимания в параметрах функций, но не так сильно в локальных (или даже членских) переменных. Возможно, нам было бы лучше сделать это.

1 голос
/ 05 июня 2011

Я считаю, что использование указателя необычно, если оно не изменится.Возможно, потому что я почти никогда не использую new в обычном коде, но полагаюсь на контейнерные классы.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...