в документации auto_ptr_ref здесь говорится это
This is an instrumental class to allow certain conversions that allow auto_ptr objects to be passed to and returned from functions.
Может кто-то объяснять, как auto_ptr_ref помогает в достижении этого. Я просто хочу понять auto_ptr класс и его внутренности
На ОС iPhone ваш вид может быть выгружен (при низком уровне памяти), но если у вас есть состояние, о котором вы заботитесь в некоторых своих представлениях, подключенных к розеткам, вы не хотите его потерять. Так что вы хотите сохранить их.
Назовите навигационный контроллер. Корневое представление выгружается из предупреждения о нехватке памяти, отправленного контроллеру, но над ним в стеке находится множество контроллеров. Когда вы возвращаетесь к корню, он перезагружает вид и закрепляет ваши розетки в том же состоянии, в котором они находились.
По крайней мере, я думаю, что это техническая причина.
Но в более общем смысле ваш контроллер заботится об этих взглядах, потому что он хочет взаимодействовать с ними. И один только этот факт означает, что вы хотите сохранить их и освободить, когда вы больше не заботитесь. Это просто хорошая практика.
-121--4196101- IBOutlet
определяется как ничего. Щелкните слово в Xcode, удерживая нажатой клавишу «Command», чтобы увидеть его определение.
Что сказать, это просто крючок, так что построитель интерфейса знает, чтобы показать его.
Я никогда не видел @ property
, который включал IBOutlet
, но я думаю, что это для таких ситуаций, как UIViewController
@ property
view
, который должен быть доступен из IB, но также может быть назначен во время выполнения.
Это довольно запутанно. В основном, auto _ ptr _ ref
существует, поскольку конструктор копирования auto _ ptr
не является конструктором копирования в стандартном смысле этого слова.
Конструкторы копирования обычно имеют сигнатуру, которая выглядит следующим образом:
X(const X &b);
Конструктор копирования auto _ ptr
имеет сигнатуру, которая выглядит так:
X(X &b)
Это потому, что auto _ ptr
необходимо изменить копируемый объект, чтобы установить его указатель на 0, чтобы облегчить семантику владения auto _ ptr
.
Иногда временные параметры не могут соответствовать конструктору копирования, который не объявляет свой аргумент const
. Здесь вводится значение auto _ ptr _ ref
. Компилятор не сможет вызвать версию конструктора копирования, отличную от const, но может вызвать оператор преобразования. Оператор преобразования создает объект auto _ ptr _ ref
, который является всего лишь временным держателем указателя. Конструктор auto _ ptr
или оператор =
вызывается с аргументом auto _ ptr _ ref
.
Если вы заметили, оператор преобразования в auto _ ptr
, который автоматически преобразует в auto _ ptr _ ref
, выполняет release
в источнике auto _ ptr
, как и конструктор копирования.
Это своего рода странный маленький танец, который происходит за кадром, потому что auto _ ptr
изменяет вещь, с которой копируется.
In C++ 0x, auto _ ptr
устаревает в пользу unique _ ptr
. уникальный _ ptr
даже не имеет конструктора копирования и использует новый «конструктор перемещения», который явно указывает на то, что он изменит перемещаемый объект и оставит его в бесполезном (но все еще допустимом) состоянии. Временникам (иначе rvalues) явно всегда разрешается быть аргументами конструктора перемещения.
Конструктор перемещения в C++ 0x имеет ряд других больших преимуществ. Это позволяет стандартным контейнерам STL хранить уникальные _ ptr
и делать правильные вещи, в отличие от того, как auto _ ptr
s не может быть. Это также в основном устраняет необходимость в функции «swap», поскольку вся цель функции «swap» обычно состоит в том, чтобы быть конструктором перемещения или оператором назначения перемещения, который никогда не выбрасывает.
Что является другим ожиданием. Конструктор перемещения и оператор назначения перемещения (так же, как деструктор) никогда не должны создаваться.
Я только что нашел очень хорошую ссылку и имя для этой техники «Переместить конструкторов» или «Colvin-Gibbons Trick»
http://en.wikibooks.org/wiki/more_c%2b%2b_idioms/move_constructor