Деструктор имеет имя, совпадающее с именем класса, но с тильдой (~) в начале. У него нет возвращаемого типа и параметров. Пример:
class MyClass {
public:
~MyClass() {
// Освобождение ресурсов
}
};
Деструктор вызывается в следующих случаях:
1. При выходе объекта из области видимости.
2. При явном вызове
delete для объекта, созданного через new.3. При завершении программы, если объект был создан в глобальной области видимости.
Деструкторы особенно важны для классов, управляющих ресурсами, чтобы избежать утечек памяти и других проблем.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤1
std::lock_guard. Он позволяет захватывать и освобождать мьютекс вручную, поддерживает отложенную блокировку, а также может быть перемещён или передан в другие функции.#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx;
void task() {
std::unique_lock<std::mutex> lock(mtx, std::defer_lock); // Отложенная блокировка
lock.lock(); // Захват мьютекса
std::cout << "Critical section\n";
lock.unlock(); // Освобождение мьютекса
}
std::unique_lock полезен в сценариях, где требуется более тонкий контроль над блокировками, например, при использовании условных переменных.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍5
nullptr — это ключевое слово, представляющее нулевой указатель. Оно было введено в C++11 для замены макроса NULL и литерала 0, которые использовались ранее.
int* ptr = nullptr;
nullptr имеет тип std::nullptr_t, что позволяет избежать неоднозначностей при перегрузке функций.
void func(int);
void func(int*);
func(nullptr); // Вызовется void func(int*)
Использование
nullptr повышает безопасность и читаемость кода, так как явно указывает на нулевой указатель.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤1👀1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤1
std::async и std::thread заключается в уровне абстракции и управлении выполнением задач. std::thread создает отдельный поток, который требует явного управления (например, вызов join() или `detach()`). Поток начинает выполнение сразу после создания.
std::thread t([](){ /* код для выполнения */ });
t.join(); // Ожидание завершения потока
std::async абстрагирует создание потока и возвращает std::future, который может быть использован для получения результата асинхронной операции. По умолчанию, задача может быть выполнена в отдельном потоке или отложена, в зависимости от политики запуска.
auto future = std::async([](){ return 42; });
int result = future.get(); // Получение результата
std::async удобен для задач с возвращаемым значением, а std::thread — для полного контроля над потоками.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2
sort в STL (Standard Template Library) сортирует элементы в диапазоне, заданном итераторами. По умолчанию используется оператор <, но можно передать пользовательский компаратор для определения порядка сортировки.
#include <algorithm>
#include <vector>
std::vector<int> vec = {4, 2, 5, 1, 3};
std::sort(vec.begin(), vec.end()); // Сортировка по возрастанию
Для сортировки по убыванию можно использовать
std::greater:
std::sort(vec.begin(), vec.end(), std::greater<int>());
Функция
sort работает за время O(N log N) и использует гибридный алгоритм (обычно Introsort), сочетающий QuickSort, HeapSort и InsertionSort. Это делает её эффективной для большинства случаев.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤2
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥1
class Base {
public:
virtual void show() {
// базовая реализация
}
};
class Derived : public Base {
public:
void show() override {
// переопределенная реализация
}
};
Base* obj = new Derived();
obj->show(); // вызовется метод Derived::show()
- Статический полиморфизм: выбор метода определяется на этапе компиляции.
- Динамический полиморфизм: выбор метода определяется во время выполнения на основе типа объекта.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥3🤔1
const указывает, что значение переменной не может быть изменено после инициализации. Это помогает предотвратить случайные изменения данных и повышает читаемость кода.
const int maxValue = 100;
maxValue = 200; // Ошибка: попытка изменить константу
const также может применяться к указателям, функциям и методам. Например, метод класса, объявленный как const, гарантирует, что он не изменяет состояние объекта.
class MyClass {
public:
void myMethod() const {
// Этот метод не может изменять поля класса
}
};
Использование
const улучшает безопасность кода и помогает компилятору оптимизировать выполнение программы.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
<type_traits>, которая проверяет, являются ли два типа одинаковыми. Возвращает std::true_type, если типы идентичны, и std::false_type в противном случае.
#include <type_traits>
bool result1 = std::is_same<int, int>::value; // true
bool result2 = std::is_same<int, double>::value; // false
std::is_same часто используется в шаблонном программировании для проверки типов на этапе компиляции. Это позволяет создавать специализированные реализации функций или классов в зависимости от типов.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤1
NULL и nullptr заключается в их типизации и использовании. - NULL
- Это макрос, который обычно определяется как
0 или ((void*)0). - Может вызывать неоднозначности при перегрузке функций, так как компилятор интерпретирует его как целое число (int).
- nullptr
- Это ключевое слово, введенное в стандарте C++11.
- Имеет тип
std::nullptr_t, что позволяет избежать неоднозначностей при перегрузке функций и обеспечивает безопасность типов. Пример:
void func(int);
void func(char*);
func(NULL); // Вызовется func(int), что может быть неочевидно
func(nullptr); // Однозначно вызовется func(char*)
Использование
nullptr предпочтительно в современном C++ для указания нулевого указателя.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤1
Основные компоненты STL:
- Контейнеры: vector, list, map, set и другие структуры для хранения данных.
- Алгоритмы: sort, find, copy и другие операции над данными.
- Итераторы: обеспечивают доступ к элементам контейнеров.
Пример:
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec = {5, 3, 1, 4, 2};
std::sort(vec.begin(), vec.end()); // Сортировка вектора
return 0;
}
STL позволяет писать эффективный и читаемый код, минимизируя ручное управление памятью и дублирование кода.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤1
std::packaged_task — это шаблонный класс, который оборачивает вызываемый объект (функцию, лямбду или функтор) и позволяет асинхронно получить результат его выполнения через std::future. Используется для выполнения задач в отдельном потоке с последующим получением результата.Пример:
#include <future>
#include <iostream>
int main() {
std::packaged_task<int()> task([](){ return 42; });
std::future<int> result = task.get_future();
std::thread t(std::move(task)); // Запуск задачи в отдельном потоке
t.join();
std::cout << result.get(); // Получение результата: 42
return 0;
}
std::packaged_task полезен для управления асинхронными операциями и синхронизации результатов между потоками.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤1
class Base {
public:
void display() {
cout << "Base class" << endl;
}
};
class Derived : public Base {
public:
void display() {
cout << "Derived class" << endl; // Переопределение метода
}
};
Производный класс может обращаться к методам и полям базового класса, если они не являются приватными.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤1