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

Деструктор! - C++

Восстановить пароль Регистрация
 
romanroman
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 135
25.10.2013, 23:52     Деструктор! #1
Как вызвать деструктор?
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
#include <iostream>
#include <conio.h>
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
class Num3
{
    Num3()
    {
        this->a = new int;
        cout<<"con"<<endl;
    }
    ~Num3()
    {
        delete[]a;
        cout<<"des"<<endl;
    }
     
public:
   int * a;
   static Num3 * Getmem_3()
    {
 
        return new Num3;
    }
  static  void Freemem_3(Num3 *a)
    {
        
        delete[]a;
    }
};
 
//int Num3:: *a=0;
int main()
{
   
    Num3::Getmem_3();
   Num3::Freemem_3(a);
   
    system("pause");
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.10.2013, 23:52     Деструктор!
Посмотрите здесь:

деструктор C++
Деструктор C++
Деструктор C++
C++ деструктор
C++ Деструктор
Деструктор C++
C++ не работает деструктор
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1886 / 1741 / 117
Регистрация: 25.03.2012
Сообщений: 5,910
Записей в блоге: 1
25.10.2013, 23:56     Деструктор! #2
его не надо явно вызывать. он сам вызовется в твоём примере
Если тебя смущает отсутствие надписи на экране, то это потому
Что он вызовется в твоём примере после того как ты нажмёшь на клавишу для выхода.
romanroman
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 135
25.10.2013, 23:58  [ТС]     Деструктор! #3
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
после того как ты нажмёшь на клавишу для выхода.
Поясните?
Kuzia domovenok
 Аватар для Kuzia domovenok
1886 / 1741 / 117
Регистрация: 25.03.2012
Сообщений: 5,910
Записей в блоге: 1
26.10.2013, 00:01     Деструктор! #4

Не по теме:

Цитата Сообщение от romanroman Посмотреть сообщение
Поясните?
а ты чё мне выкаешь в ответ на тыканье?

Цитата Сообщение от romanroman Посмотреть сообщение
Поясните?
В студии работаешь? Убери system("pause") и запусти программу через Ctrl+F5
romanroman
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 135
26.10.2013, 00:07  [ТС]     Деструктор! #5
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
В студии работаешь?
Да
Все равно деструктор не вызвался



Добавлено через 49 секунд
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
а ты чё мне выкаешь в ответ на тыканье?
элементарное уважение
Kuzia domovenok
 Аватар для Kuzia domovenok
1886 / 1741 / 117
Регистрация: 25.03.2012
Сообщений: 5,910
Записей в блоге: 1
26.10.2013, 00:09     Деструктор! #6
Стоп! а в каком тут вообще месте деструктор должен быть вызван???
Для какого объекта? Их тут нету!
romanroman
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 135
26.10.2013, 00:16  [ТС]     Деструктор! #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
#include <iostream>
#include <conio.h>
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
class Num3
{
    Num3()
    {
        this->a = new int;
        cout<<"con"<<endl;
    }
    ~Num3()
    {
        delete[]a;
        cout<<"des"<<endl;
    }
     
public:
   int * a;
   static Num3 * Getmem_3()
    {
 
        return new Num3;
    }
static  void Freemem_3(Num3 *a)
    {
        
        delete a;
    }
};
 
int main()
{   
    {
    Num3::Getmem_3();
    }
   // system("pause");
    return 0;
}
Добавлено через 31 секунду
Ни чего не изменилось.

Добавлено через 4 минуты
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
его не надо явно вызывать
И через методы класса деструктор не получиться не явно вызвать
Hunter13ua
46 / 46 / 5
Регистрация: 25.10.2011
Сообщений: 183
26.10.2013, 00:19     Деструктор! #8
romanroman, у Вас деструктор запривачен. Это раз. А два: вы не инициализируете объекты класса Num3, почему ожидаете деструктор? Кого удалять будем?
romanroman
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 135
26.10.2013, 00:24  [ТС]     Деструктор! #9
Цитата Сообщение от Hunter13ua Посмотреть сообщение
у вас деструктор запривачен
Что деструктор запривачет, это так задумано, переменную я инициализировал, но деструктор не вызывается
Kuzia domovenok
 Аватар для Kuzia domovenok
1886 / 1741 / 117
Регистрация: 25.03.2012
Сообщений: 5,910
Записей в блоге: 1
26.10.2013, 00:31     Деструктор! #10
Цитата Сообщение от romanroman Посмотреть сообщение
переменную я инициализировал
какую? нет такой переменной.
Сейчас ты скажешь, в какой строчке это происходит по-твоему и я тебе отвечу, почему там нет никаких переменных.
romanroman
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 135
26.10.2013, 00:33  [ТС]     Деструктор! #11
Помоги, написать тогда
Kuzia domovenok
 Аватар для Kuzia domovenok
1886 / 1741 / 117
Регистрация: 25.03.2012
Сообщений: 5,910
Записей в блоге: 1
26.10.2013, 00:37     Деструктор! #12
Разве не это надо? Не?
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
#include <iostream>
#include <conio.h>
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
class Num3
{
public:
    Num3()
    {
        this->a = new int;
        cout<<"con"<<endl;
    }
    ~Num3()
    {
        delete[]a;
        cout<<"des"<<endl;
    }  
private:
   int * a;
};
int main()
{
   {
    Num3 var;
    }
   
    system("pause");
    return 0;
}
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
26.10.2013, 00:38     Деструктор! #13
romanroman, деструктор вызывается при уничтожении объекта. Если бы объект не создавался динамически, т.е. компилятор бы сам брал на себя ответственность по его удалению, и деструктор бы вызвался после закрывающейся скобки (когда вышел из области видимости). В данном случае здесь выделяется память под объект, соответственно вызывается конструктор для конструирования. А уничтожать в коде его никто не собирается (до завершения программы). Так деструктор вызовется:
C++
1
2
3
  Num3 *a = Num3::Getmem_3();
    
    Num3::Freemem_3(a);
romanroman
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 135
26.10.2013, 00:42  [ТС]     Деструктор! #14
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Разве не это надо? Не?
Не, не это надо

Добавлено через 14 секунд
Нужно, что бы конструкторы и деструкторы закрытыми были

Добавлено через 1 минуту
BumerangSP, спасибо
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.10.2013, 05:30     Деструктор!
Еще ссылки по теме:

C++ Деструктор
Деструктор C++
C++ Деструктор
Деструктор C++
C++ Деструктор

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

Или воспользуйтесь поиском по форуму:
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
5613 / 3092 / 351
Регистрация: 29.11.2010
Сообщений: 8,308
26.10.2013, 05:30     Деструктор! #15
Кстати, тут у вас UB. Вы память выделяете как для переменной, а освобождаете как для массива (new, но delete[])
Yandex
Объявления
26.10.2013, 05:30     Деструктор!
Ответ Создать тему
Опции темы

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