Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Игорюня
20 / 16 / 7
Регистрация: 07.12.2013
Сообщений: 244
#1

Виртуальные деструкторы - C++

01.02.2014, 10:46. Просмотров 670. Ответов 21
Метки нет (Все метки)

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
#include <iostream>
using namespace std;
 
class first
{
public:
    first();
    virtual ~first(){delete pointer;}
    virtual void text(){cout<<"text"<<endl;}
    void text2(){cout<<"text2"<<endl;}  
};
 
class second:public first
{
public:
    second();
    virtual ~second(){delete pointer;}
    virtual void text(){cout<<"text"<<endl;}        
    void text2(){cout<<"text2"<<endl;}
};
 
int main()
{   first *pointer=new second;
    pointer->text();
    pointer->text2();
    system("pause");
}
Как я понял правильно,вызовется сперва деструктор производного класса,т.к. он виртуальный,а потом он автоматически вызовет деструктор базового класса,чтобы окончательно удалить динамический объект.Тело деструкторов обоих классов написал криво,судя по логам компилятора:"нельзя удалять объекты, не являющиеся указателями".Помогите исправить.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.02.2014, 10:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Виртуальные деструкторы (C++):

Виртуальные деструкторы - C++
Можно ли вызвать деструктор базового класса вместо использования виртуальных деструкторов? class CBase { public: CBase(const...

Наследование. Виртуальные методы/деструкторы. - C++
Есть базовый класс Cell (код можно даже не смотреть - он просто для иллюстрации -&gt; вопрос внизу) class Cell { friend class Obstacle;...

виртуальные и чисто виртуальные функции - C++
Чем они отличаются?? если можно, с примерами. И как из виртуальной функции сделать чисто виртуальную? #include &lt;iostream&gt; using...

Деструкторы - C++
Всем доброго времени суток! Возникли некоторые непонятки с деструкторами, а точнее их время вызова и механизм работы. Вот код: ...

Деструкторы - C++
Вообщем сразу к сути. В нижеприведенном примере вызывается 2 деструктора. Я никак не пойму, почему именно два? вот сам метод: ...

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

21
Меорн
74 / 59 / 29
Регистрация: 01.02.2014
Сообщений: 203
01.02.2014, 11:08 #2
C++
1
virtual ~first(){delete pointer;}
кто такой pointer? где он создается?
0
aLarman
644 / 565 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
Завершенные тесты: 1
01.02.2014, 11:35 #3
Цитата Сообщение от Игорюня Посмотреть сообщение
C++
1
2
3
4
5
6
7
int main()
 {
 first *pointer=new second;
 pointer->text();
 pointer->text2();
 system("pause");
 }
интересно как Вы проверили работу деструктора, если тут даже не вызываете его, и автоматически он не вызывается
C++
1
2
3
4
///
delete pointer;
system("pause");
//
и кстати Меорн, прав, что Вы пытаетесь удалить то в деструкторе?
1
Kuzia domovenok
2117 / 1946 / 190
Регистрация: 25.03.2012
Сообщений: 6,750
Записей в блоге: 1
01.02.2014, 11:43 #4
delete pointer...
0
aLarman
644 / 565 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
Завершенные тесты: 1
01.02.2014, 11:53 #5
0
Игорюня
20 / 16 / 7
Регистрация: 07.12.2013
Сообщений: 244
01.02.2014, 12:18  [ТС] #6
Цитата Сообщение от aLarman Посмотреть сообщение
интересно как Вы проверили работу деструктора, если тут даже не вызываете его, и автоматически он не вызывается
C++
1
2
3
4
///
delete pointer;
system("pause");
//
и кстати Меорн, прав, что Вы пытаетесь удалить то в деструкторе?
Когда программа закончится,конструкторы не вызовутся сами?

Добавлено через 1 минуту
Я же сказал,что накосячил,помогли бы лучше,чем ржать.
0
aLarman
644 / 565 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
Завершенные тесты: 1
01.02.2014, 12:18 #7
нет, Вы же выделяете память и там создаете объект, надо удалять)
1
Игорюня
20 / 16 / 7
Регистрация: 07.12.2013
Сообщений: 244
01.02.2014, 12:20  [ТС] #8
Цитата Сообщение от aLarman Посмотреть сообщение
нет, Вы же выделяете память и там создаете объект, надо удалять)
Ну ведь в теле деструктора динамический объект удаляется?
0
Меорн
74 / 59 / 29
Регистрация: 01.02.2014
Сообщений: 203
01.02.2014, 12:21 #9
если ты создаешь объект оператором new, то ты сам отвечаешь за его удаление.
0
Kuzia domovenok
2117 / 1946 / 190
Регистрация: 25.03.2012
Сообщений: 6,750
Записей в блоге: 1
01.02.2014, 12:22 #10
Деструкторы тут вообще не нужны!
1
aLarman
644 / 565 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
Завершенные тесты: 1
01.02.2014, 12:22 #11
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 namespace std;
 
class first
{
public:
    first(){cout<<"ConstrBase"<<endl;}
    virtual ~first(){cout<<"DestrBase"<<endl;}
    virtual void text(){cout<<"text"<<endl;}
    void text2(){cout<<"text2"<<endl;}  
};
 
class second:public first
{
public:
    second(){cout<<"ConstDeriv"<<endl;}
    virtual ~second(){cout<<"DestrDerive"<<endl;}
    virtual void text(){cout<<"text"<<endl;}        
    void text2(){cout<<"text2"<<endl;}
};
 
int main()
{   first *pointer=new second;
    pointer->text();
    pointer->text2();
    delete pointer;
    system("pause");
}
1
Меорн
74 / 59 / 29
Регистрация: 01.02.2014
Сообщений: 203
01.02.2014, 12:22 #12
а деструктаре не понятно что удоляется.
0
Игорюня
20 / 16 / 7
Регистрация: 07.12.2013
Сообщений: 244
01.02.2014, 12:23  [ТС] #13
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Деструкторы тут вообще не нужны!
Ну мы же создали объект в динамической памяти?Его не надо удалять в ручную? У меня уже голова не варит.
0
aLarman
644 / 565 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
Завершенные тесты: 1
01.02.2014, 12:23 #14
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Деструкторы тут вообще не нужны!
Ну хочет человек проверить как работают констр\дестр\наследование, обязательно создавать сложные классы с указателями чтоли
1
Kuzia domovenok
2117 / 1946 / 190
Регистрация: 25.03.2012
Сообщений: 6,750
Записей в блоге: 1
01.02.2014, 12:23 #15
Игорюня, деструктор никаких объектов не удаляет, вообще-то
1
01.02.2014, 12:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.02.2014, 12:23
Привет! Вот еще темы с ответами:

Конструкторы и деструкторы - C++
Необходимо реализовать класс с двумя полями, имеющими имена first и second. Обязательно должны присутствовать: Для инициализации...

Где деструкторы? - C++
Ребят сижу разбираю код на С++,не могу понять где диструктор тут.. #include &lt;vcl.h&gt; #pragma hdrstop #include &quot;Unit1.h&quot; ...

Конструкторы и деструкторы - C++
Помогите, пожалуйста, исправить программу и закончить ее как надо. Необходимо реализовать класс с двумя полями, имеющими имена first и...

Конструкторы и деструкторы - C++
Здравствуйте уважаемые программисты, помогите пожалуйста новичку? Не могу разобраться в программе, где смог там написал комментарий и то не...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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