nullptr
, изменяемым и перенаправляемым на другой объект.
int x = 10;
int* ptr = &x; // ptr хранит адрес x
*ptr = 20; // изменение значения через указатель
Ссылка — это псевдоним для существующего объекта. Не может быть
null
, должна быть инициализирована при объявлении и не может быть перенаправлена.
int y = 30;
int& ref = y; // ref — псевдоним y
ref = 40; // изменение значения через ссылку
Указатели поддерживают арифметику, ссылки — нет. Ссылки безопаснее, но менее гибкие.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🤩1
std::is_polymorphic
— это шаблонный класс из <type_traits>
, который проверяет, является ли тип полиморфным. Полиморфный тип содержит хотя бы одну виртуальную функцию или наследуется от полиморфного класса. Возвращает
std::true_type
или std::false_type
в зависимости от результата проверки. Может использоваться для условной компиляции или статических проверок.
struct A { virtual void foo() {} };
struct B : A {};
struct C {};
static_assert(std::is_polymorphic<A>::value); // true
static_assert(std::is_polymorphic<B>::value); // true
static_assert(!std::is_polymorphic<C>::value); // false
Полезен для шаблонного метапрограммирования, когда требуется обрабатывать полиморфные и не полиморфные типы по-разному.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
std::make_unique
— удобная функция для создания std::unique_ptr
, обеспечивающая безопасность при исключениях и избегающая явного new
. Принимает аргументы конструктора объекта и возвращает
std::unique_ptr
.
struct Widget {
Widget(int x, int y) {}
};
// Создание unique_ptr с make_unique
auto ptr = std::make_unique<Widget>(10, 20);
Для массивов используетя перегрузка с
[]
:
auto arr = std::make_unique<int[]>(5); // Создает массив из 5 int
Предпочтительнее
new
+ unique_ptr
, так как исключает утечки при выбросе исключений.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7