Вот читаю про std::unique_ptr<T> и офигеваю. -> https://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.4/a01404.html
http://ru.cppreference.com/w/cpp/memory/unique_ptr
std::unique_ptr – умный указатель, который:
получает единоличное владение объектом через его указатель, и
разрушает объект через его указатель, когда unique_ptr выходит из области видимости.
unique_ptr не может быть скопирован или задан через операцию присвоения. Неконстантный unique_ptr может передать владение управляемым объектом другому указателю unique_ptr. const std::unique_ptr не может быть передан, ограничивая время жизни управляемого объекта областью, в которой указатель был создан. Когда unique_ptr уничтожается, он удаляет объект с помощью Deleter.
Существует две версии std::unique_ptr:
1) управляет временем жизни одного объекта, например, созданного с помощью оператора new
2) управляет временем жизни массива, с длиной, определенной во время выполнения, созданного с помощью new[]
Типичные случаи применения std::unique_ptr включают:
обеспечение безопасности исключений для классов и функций, которые управляют объектами с динамическим временем жизни, гарантируя удаление в случае нормального завершения и завершения по исключению
передача владения динамически созданным объектом в функции
получение владения динамически созданным объектом из функций
в качестве типа элемента в контейнерах, поддерживающих семантику перемещения, таких как std::vector, которые хранят указатели на динамически выделенные объекты (например, если желательно полиморфное поведение)
1. Если он гарантирует одинственность указателя - там точно нет какой-нибудь дополнительной переменной?
2. Почитал библиотечную реализацию. --> Сильно офигел.
Вот это все точно без оверхедов скомпилится? Мне вообще там 2/3 текста непонятны, но это мои личные трудности...