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

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

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

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

25.10.2013, 23:52. Просмотров 529. Ответов 14
Метки нет (Все метки)

Как вызвать деструктор?
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++
#include &lt;iostream&gt; #include &lt;conio.h&gt; #define _CRTDBG_MAP_ALLOC #include &lt;crtdbg.h&gt; using namespace std; class list{ ...

деструктор - C++
Для освобождения памяти динамически выделенных массивам надо использовать delete. требуется ли освобождать память выделенную под простой...

деструктор - C++
опять же проблема с лабой. помоги дописать деструктор. #include &quot;stdafx.h&quot; #include &lt;string&gt; #include &lt;iostream&gt; using...

деструктор по умолчанию - C++
Всем привет. Хотелось бы обсудить такой код: class A { }; class B: virtual public A { }; class C: public virtual A

Не работает деструктор - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; using std::cout; #pragma hdrstop #pragma argsused class vect { public: vect(int...

конструктор и деструктор - C++
Почему деструктор не вызывается? #include &lt;iostream.h&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; class myclass{ float a; ...

Не работает деструктор - C++
Выписал пример из самоучителя, но выяснилось что не работает деструктор. В чем проблема? #include &lt;iostream&gt; using namespace std; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 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
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 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
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 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
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
26.10.2013, 00:31     Деструктор! #10
Цитата Сообщение от romanroman Посмотреть сообщение
переменную я инициализировал
какую? нет такой переменной.
Сейчас ты скажешь, в какой строчке это происходит по-твоему и я тебе отвечу, почему там нет никаких переменных.
romanroman
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 135
26.10.2013, 00:33  [ТС]     Деструктор! #11
Помоги, написать тогда
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 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
4286 / 1408 / 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++
#include &lt;iostream&gt; using namespace std; class Cat { public: Cat(int); //...

Зацикливается деструктор - C++
Здравствуйте :) Очень прошу ограничиться ответом на мой вопрос, если Вы его знаете, и приберечь на другой раз советы использовать готовые...

виртуальный деструктор - C++
есть такой пример, у меня вопрос, почему здесь деструктор декларирован просто как деструктор, а не виртуальный (и является ли он в данном...

Деструктор и указатель - C++
Допустим, имеем класс с переменной-указателем: class A { public: A(){} ~A(); private: ...


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

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

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