2015-09-07 2 views
0

Когда вы достигаете умного указателя, std :: unique_ptr обычно должен быть быть ближайшим под рукой. Разумно предположить, что по по умолчанию std :: unique_ptrs имеют тот же размер, что и исходные указатели, а для большинства операций (включая разыменование) они выполняют точно такие же инструкции . Это означает, что вы можете использовать их даже в ситуациях , где память и циклы жесткие. Если необработанный указатель достаточно мал и достаточно быстрый для вас, std :: unique_ptr почти наверняка тоже.std :: unique_ptr память и производительность

-Скотт Мейерс (эффективная Современный C++)

Как смелая часть может быть правдой, это занимает две фазы, чтобы найти сырой PTR в смарт-PTR, а затем вызвать метод. Как они могут быть одинаково быстрыми?

+1

Что такое «найти необработанный ptr в smart ptr»? Фактический указатель (обычно) является просто членом интеллектуального указателя, нет необходимости «находить» что-либо. – lisyarus

+4

Оптимизация. Это замечательная часть о C++, которой все могут наслаждаться! – ThePhD

+4

Направленность, скорее всего, оптимизирована, потому что весь код доступен для оптимизатора. – juanchopanza

ответ

3

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

+0

, когда вы вызываете 'smartPtr-> doF()' вы получаете 'smartPtr-> rawPtr-> doF()' right? – Narek

+0

@Narek No. Вы просто получаете 'rawPtr-> doF()'. Что делает косвенность, которую нельзя устранить? Это ничем не отличается от 'int a = 3; return a; '. Компилятор будет генерировать тот же код, что и если бы вы вернули 3; '. –

+0

Вы хотите сказать, что компилятор легко оптимизируется? – Narek

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