Добавил:
Рад, если кому-то помог Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
0
Добавлен:
01.11.2025
Размер:
2.15 Кб
Скачать
#include <iostream>
#include <windows.h>
using namespace std;

class ResourceHolder {
private:
    int* data;
    
public:
    ResourceHolder(int value) {
        data = new int(value);
        cout << "Выделена память для значения: " << value << endl;
    }
    
    // Деструктор
    ~ResourceHolder() {
        delete data;
        cout << "Память освобождена" << endl;
    }
    
    int getValue() { return *data; }
};

// Ситуации вызова деструктора:
// 1. Выход объекта из области видимости
void testFunction() {
    ResourceHolder rh(100);
    cout << "Внутри функции, значение: " << rh.getValue() << endl;
} // деструктор вызывается здесь

// 2. Явный вызов delete
void testDynamic() {
    ResourceHolder* prh = new ResourceHolder(200);
    cout << "Динамический объект, значение: " << prh->getValue() << endl;
    delete prh; // деструктор вызывается здесь
}

int main() {
    SetConsoleOutputCP(65001);
    
    cout << "=== Задание 2.18 - Деструктор ===" << endl;
    
    cout << "\nСитуация 1: Выход из области видимости" << endl;
    testFunction();
    
    cout << "\nСитуация 2: Явный вызов delete" << endl;
    testDynamic();
    
    cout << "\nСитуация 3: Локальный объект в блоке" << endl;
    {
        ResourceHolder local(300);
        cout << "Внутри блока, значение: " << local.getValue() << endl;
    } // деструктор вызывается здесь
    
    cout << "\nСитуация 4: Временные объекты" << endl;
    ResourceHolder temp(400);
    cout << "Основная функция, значение: " << temp.getValue() << endl;
    
    cout << "\nДеструктор будет вызван автоматически при завершении программы" << endl;
    
    return 0;
}
Соседние файлы в папке Лаба2