что является auto_ptr_ref, чего это достигает и как это достигает его

в документации 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 класс и его внутренности

10
задан Yogesh Arora 23 January 2010 в 02:36
поделиться

2 ответа

На ОС iPhone ваш вид может быть выгружен (при низком уровне памяти), но если у вас есть состояние, о котором вы заботитесь в некоторых своих представлениях, подключенных к розеткам, вы не хотите его потерять. Так что вы хотите сохранить их.

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

По крайней мере, я думаю, что это техническая причина.

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

-121--4196101-

IBOutlet определяется как ничего. Щелкните слово в Xcode, удерживая нажатой клавишу «Command», чтобы увидеть его определение.

Что сказать, это просто крючок, так что построитель интерфейса знает, чтобы показать его. Я никогда не видел @ property , который включал IBOutlet , но я думаю, что это для таких ситуаций, как UIViewController @ property view , который должен быть доступен из IB, но также может быть назначен во время выполнения.

-121--4196102-

Это довольно запутанно. В основном, 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 изменяет вещь, с которой копируется.

Случайный связанный тангет около C++ 0x и unique_ptr

In C++ 0x, auto _ ptr устаревает в пользу unique _ ptr . уникальный _ ptr даже не имеет конструктора копирования и использует новый «конструктор перемещения», который явно указывает на то, что он изменит перемещаемый объект и оставит его в бесполезном (но все еще допустимом) состоянии. Временникам (иначе rvalues) явно всегда разрешается быть аргументами конструктора перемещения.

Конструктор перемещения в C++ 0x имеет ряд других больших преимуществ. Это позволяет стандартным контейнерам STL хранить уникальные _ ptr и делать правильные вещи, в отличие от того, как auto _ ptr s не может быть. Это также в основном устраняет необходимость в функции «swap», поскольку вся цель функции «swap» обычно состоит в том, чтобы быть конструктором перемещения или оператором назначения перемещения, который никогда не выбрасывает.

Что является другим ожиданием. Конструктор перемещения и оператор назначения перемещения (так же, как деструктор) никогда не должны создаваться.

15
ответ дан 3 December 2019 в 21:59
поделиться

Я только что нашел очень хорошую ссылку и имя для этой техники «Переместить конструкторов» или «Colvin-Gibbons Trick»

http://en.wikibooks.org/wiki/more_c%2b%2b_idioms/move_constructor

1
ответ дан 3 December 2019 в 21:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: