Форум программистов, компьютерный форум CyberForum.ru

деструктор - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ программа перемножения массивов http://www.cyberforum.ru/cpp-beginners/thread269590.html
я примерно понял в чем дело, можно как-нибудь удалить свою тему?
C++ Работа с последовательностями чисел через файлы. Народ,хелп. можете помочь разобраться наконец как работать с этими txt файлами? как правильно использовать все команды начинающиеся с infile. (infile.seekg, например). ну, и сделать это желательно на примере этой задачи из задачника Абрамяна. считает, почему-то только сумму из первого файла. подозреваю, что дело как раз в пресловутых командах infile. буду очень признателен. /* Series29 ... http://www.cyberforum.ru/cpp-beginners/thread269587.html
Arageli C++
Здравствуйте, мне необходимо работать с числами длиной ~2500-3000 знаков, для этого решил попробовать использовать библиотеку Arageli, и почему-то в переменную типа big_int он не может записать число даже 256^10, там результат 0, почему? делаю так: big_int a= Arageli::pow(256, 10); PS или посоветуйте другие библиотеки ) PPS пробовал GMP, но там вообще запутался
Создания однонаправленного списка и сохранения в типизированный файл. C++
Доброе время суток. Прошу помощь в решении задачи. Я совсем запутался с однонаправленным списком. И вторая проблема состоит в том что не могу понять что из себя представляет типизированный файл. Вот условия задачи. В файле хранятся данные в виде записей формата: АВТОМОБИЛЬ Тип Фирма-изготов. Объем двигат. Пробег – М Цена
C++ Класс-Контейнер Вектор http://www.cyberforum.ru/cpp-beginners/thread269559.html
Подскажите пожалуйста, как заполнить вектор латинским алфавитом?
C++ Обработка нажатия клавиши без подтвержения enter Здравствуйте, уважаемые программисты. Подскажите в чем проблема. Вывожу рисунок посредством команды dos в языке turbo c. Необходимо зациклить вывод картинки до нажатия клаши esc. При нажатии стрелки вправво выполнить некую другую команду. Короче, надо обработать нажатые символы на клавиатуре, но без подтвердения клавишей enter. Вот, что получилось у меня. Жирным большим шрифтом выделил мое... подробнее

Показать сообщение отдельно
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
03.04.2011, 22:00     деструктор
Цитата Сообщение от gGrn-7DA Посмотреть сообщение
В случае использования списков?
В этом вопросе я не совсем понял, о чем идет речь, но так как написано у Вас, делать точно не надо
Цитата Сообщение от gGrn-7DA Посмотреть сообщение
То есть при освобождении памяти, выделенной массиву, рекурсивного освобождения памяти не происходит.
Рекурсивного освобождения памяти не происходит, все что создано с помощью new должно быть освобождено с помощью delete. Пример с многомерными массивами:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
using std::cout;
 
int main()
{
    int ***ptr = NULL;
 
    ptr = new int **[3];
    cout << ptr << " was created\n";
 
    for (int i = 0; i < 3; ++i) {
        ptr[i] = new int *[3];
        cout << ptr[i] << " was created\n";
 
        for (int j = 0; j < 3; ++j) {
            ptr[i][j] = new int;
            cout << ptr[i][j] << " was created\n";
        }
    }
 
    for (int i = 0; i < 3; ++i) {
        for (int j = 0; j < 3; ++j) {
            cout << ptr[i][j] << " was deleted\n";
            delete ptr[i][j];
        }
 
        cout << ptr[i] << " was deleted\n";
        delete[] ptr[i];
    }
 
    cout << ptr << " was deleted\n";
    delete[] ptr;
}
Код
006C7680 was created
006C8160 was created
004E1990 was created
004E19C0 was created
004E1A20 was created
006C8198 was created
004E1A50 was created
004E1A80 was created
004E1AB0 was created
006C8328 was created
004E1AE0 was created
004E1B10 was created
004E1B40 was created

004E1990 was deleted
004E19C0 was deleted
004E1A20 was deleted
006C8160 was deleted
004E1A50 was deleted
004E1A80 was deleted
004E1AB0 was deleted
006C8198 was deleted
004E1AE0 was deleted
004E1B10 was deleted
004E1B40 was deleted
006C8328 was deleted
006C7680 was deleted
По результатам видно, что для каждого указателя (адреса), для которого выделена память, существует вызов delete.
Цитата Сообщение от gGrn-7DA Посмотреть сообщение
А деструктор для объектов класса A, находящихся на самых концах массива, автоматом вызывается при delete[] a[i1][i2][i3] или нет?
Опять же не совсем понимаю, о чем идет речь, но деструктор вызывается при delete. Смотрим пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
using std::cout;
 
class Object
{
public:
    Object() {
        ptr = new int;
        cout << ptr << " was created\n";
    }
 
    ~Object() {
        cout << ptr << " was deleted\n";
        delete ptr;
    }
 
private:
    int *ptr;
};
 
int main()
{
    Object *objects = new Object[2];
    cout << objects << " was created\n";
 
    cout << objects << " was deleted\n";
    delete[] objects;
}
При выделении динамической памяти для objects срабатывает конструктор по умолчанию. При вызове delete[] objects срабатывает деструктор для каждого objects[i]. Результат опять же подтверждает сказанное.
Код
00591990 was created
005919C0 was created
00577684 was created

00577684 was deleted
005919C0 was deleted
00591990 was deleted
 
Текущее время: 01:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru