2012-07-14 6 views
0

Можно создать дубликат:
What is a smart pointer and when should I use one?Должны/могут использоваться интеллектуальные указатели?

Я недавно прочитал о смарт-указатель, например, shared_ptr или auto_ptr. Хорошая/плохая практика предпочитает их по обычным указателям?

E.g. следует ли использовать их в аргументах для функций или при хранении указателей как членов класса?

+0

Недавно прочитал о них? Скотт Мейер написал о них еще в 1995 году, поэтому они выдержали испытание временем. – duffymo

ответ

0

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

+1

Они не медленнее, чем обычные указатели. – rubenvb

+1

@rubenvb: они добавляют не-nop операции для копирования, создания и выпуска и, следовательно, программа будет медленнее. Это не говорит, что он будет намного медленнее, его можно даже не обнаружить. – Dani

+1

@Dani: 'shared_ptr' делает операции, но' unique_ptr' (или 'auto_ptr', если вы застряли в прошлом) не имеет накладных расходов над необработанным указателем. –

Смежные вопросы