У меня есть окно WPF, которое запускается на фоновый поток как своего рода «окно уведомления» ... при возникновении события отображается сообщение ... пользователь нажимает кнопку «Отложить», и я вызываю this.Visibility = Visibility.Collapsed
В тот момент, когда я скрываю окно (либо вызывая this.Hide ()
, либо устанавливая Visibility
, как упомянуто выше) ... "
#include <iostream>
#include <memory>
using namespace std;
unique_ptr<int> foo()
{
unique_ptr<int> p( new int(10) );
return p; // 1
//return move( p ); // 2
}
int main()
{
unique_ptr<int> p = foo();
cout << *p << endl;
return 0;
}
Приведенный выше код компилируется и работает так, как задумано. Так почему же строка 1
не вызывает конструктор копирования и приводит к ошибкам компилятора? Если бы мне пришлось использовать вместо этого строку 2
, это имело бы смысл (использование строки 2
также работает, но от нас это не требуется).
Я знаю C ++ 0x разрешает это исключение для unique_ptr
, поскольку возвращаемое значение является временным объектом, который будет уничтожен, как только функция завершится, тем самым гарантируя уникальность возвращаемого указателя. Мне любопытно, как это реализовано, это специальный корпус в компиляторе или есть какой-то другой пункт в спецификации языка, который он использует?