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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
MolotovD
1 / 1 / 0
Регистрация: 20.09.2015
Сообщений: 12
#1

Почему может не работать деструктор? - C++

08.02.2016, 21:12. Просмотров 195. Ответов 6

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
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
#include <string.h>
 
using namespace std;
class Person
{
private:
    char* name;
public:
    Person(char* s) 
    {
        int size = strlen(s);
        name = new char[size + 1];
        strcpy(name, s);
        name[size] = '\0';
    };
    ~Person()
    {
        cout << "Destruct!" << endl;
        delete [] name; 
    }
    void getName()
    {
        cout << name << endl;
    }
};
int main()
{
    Person* person[100];
    
    int n = 0;
    char choice;
    do
    {
        person[n] = new Person("Vadik");
        person[n]->getName();
        n++;
        cout << " Continue ?(y/n)";
        cin >> choice;
    } while (choice == 'y');
 
 
        system("pause");
    return 0;
}
Почему не работает деструктор?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.02.2016, 21:12     Почему может не работать деструктор?
Посмотрите здесь:

внук родительского класса не может работать с полями дедовского класса; почему? C++
C++ Почему сын может спокойно работать с полями privat отцовского класса (опять template <class T> воду мутит!)
Почему не отрабатывает деструктор? C++
C++ Почему часть функций в KERNEL32.DLL может не загружаться/не работать
C++ деструктор не может очистить память
C++ Почему создается виртуальный деструктор A, а в таблице виртуальных функций лежит деструктор B
C++ Почему в книге пишут что cout не может работать без iostream в коде?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Hikari
Хитрая блондиночка $)
1447 / 954 / 285
Регистрация: 21.12.2015
Сообщений: 3,798
08.02.2016, 21:20     Почему может не работать деструктор? #2
Цитата Сообщение от MolotovD Посмотреть сообщение
Почему не работает деструктор?
А где освобождение объектов? Или ты полагаешься на компилятор?
castaway
Эксперт С++
4879 / 3015 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
08.02.2016, 21:24     Почему может не работать деструктор? #3
Цитата Сообщение от MolotovD Посмотреть сообщение
Почему не работает деструктор?
Он работает. Просто вы не удаляете объект(ы).
MolotovD
1 / 1 / 0
Регистрация: 20.09.2015
Сообщений: 12
08.02.2016, 21:53  [ТС]     Почему может не работать деструктор? #4
Спасибо. Можно еще на примере кода?
Деструктор так же не выводит строку, которую должен
Миниатюры
Почему может не работать деструктор?  
castaway
Эксперт С++
4879 / 3015 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
08.02.2016, 21:54     Почему может не работать деструктор? #5
Цитата Сообщение от MolotovD Посмотреть сообщение
Можно еще на примере кода?
Можно что? Код исправлен!? - Показывай его.
nord_v
227 / 176 / 69
Регистрация: 22.08.2013
Сообщений: 724
08.02.2016, 21:56     Почему может не работать деструктор? #6
Цитата Сообщение от MolotovD Посмотреть сообщение
name[size] = '\0';
Это не нужно, strcpy() сама добавляет.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.02.2016, 22:35     Почему может не работать деструктор?
Еще ссылки по теме:

Почему не работает деструктор? C++
C++ Почему не вызывается деструктор?
Почему не работает деструктор? C++
C++ Почему может не работать обработчик события?
C++ Почему вызывается деструктор?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
MolotovD
1 / 1 / 0
Регистрация: 20.09.2015
Сообщений: 12
08.02.2016, 22:35  [ТС]     Почему может не работать деструктор? #7
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
#include <string.h>
 
using namespace std;
class Person
{
private:
    char* name;
public:
    Person(char* s) 
    {
        int size = strlen(s);
        name = new char[size + 1];
        strcpy(name, s);
    };
    ~Person()
    {
        cout << "Destruct!" << endl;
        delete[] name;
    }
    void getName()
    {
        cout << name << endl;
    }
 
};
int main()
{
    Person* person[100];
    
    int n = 0;
    char choice;
    do
    {
        
        person[n] = new Person("Vadik");
        person[n]->getName();
        cout << " Continue ?(y/n)";
        cin >> choice;
        n++;
    } while (choice == 'y');
    for (int i = 0;i < n;i++)
        delete person[i];
 
    system("pause");
    return 0;
}
Дошло до меня ! Еще раз спасибо
Yandex
Объявления
08.02.2016, 22:35     Почему может не работать деструктор?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru