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

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

Восстановить пароль Регистрация
 
LAans
1 / 1 / 0
Регистрация: 29.04.2010
Сообщений: 46
17.03.2011, 01:06     Деструктор #1
здравствуйте. подскажите пожалуйста ... почему деструктор некорректно работает ?
не хочет уничтожает объекты динамического массива ( massivD() )

если с помощью ф-ции сет изменить конструктор с параметрами на Ukraine
то деструктор срабатывает в таком порядке
Belarus
Andorra
Italy
Russia
Russia
Ukraine
Ukraine
Russia


C++
1
2
3
4
5
6
7
8
9
10
11
 
 void COUNTRY::massivD()
 {
  COUNTRY* h;
  h=new COUNTRY [3];
  h[0].Set("Latvia", "Parliamentary Republic", 546546.7);
  h[1].Set("Greece", "Parliamentary Republic", 45355.6);
  h[2].Set("Germany", "Federal Parliamentary Republic", 342443.9);
    for (int i=0;i<3;i++)
     h[i].print();
 }
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
// СOUNTRY1.H
#ifndef __COUNTRY1_H
#define __COUNTRY1_H
 
const int size=50;
 
class COUNTRY
 {
public:
  COUNTRY();
  COUNTRY(char*, char*, double);
  COUNTRY(const COUNTRY&);
  ~COUNTRY();
  char* GetName();
  char* GetForm();
  double GetSq() const;
  void SetName(char*);
  void SetForm(char*);
  void SetSq(double);
  void Set(char*, char*, double);
  void massivD();
  void massivS();
  void print();
private:
  char name[size];
  char form[size];
  double sq;
 };
# endif
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# include <iostream.h>
# include <stdlib.h>
# include <conio.h>
# include <string.h>
# include "country1.h"
 
 COUNTRY::COUNTRY (char*name, char*form, double sq)
 {
  Set(name, form, sq);
 }
 
 COUNTRY::COUNTRY ()
 {
  char name[size]="Russia";
  char form[size]="Federation Republic";
  double sq=788754.47;
  Set(name, form, sq);
 }
 
 COUNTRY::COUNTRY (const COUNTRY&c)
 {
  strcpy(name, c.name);
  strcpy(form, c.form);
  sq=c.sq;
 }
 
 COUNTRY::~COUNTRY ()
 {
    cout <<"Destruktor: " << GetName() << endl;
    delete []name;
 }
 
 void COUNTRY::print()
 {
    cout <<"Nazvanie strani: " << GetName() << endl;
    cout <<"Forma pravleniya: " << GetForm() << endl;
    cout <<"Ploshad: " << GetSq() << endl;
    cout << endl;
 }
 
 void COUNTRY::Set(char*name, char*form, double sq)
 {
  SetName(name);
  SetForm(form);
  SetSq(sq);
 }
 
 void COUNTRY::SetName (char* name) { strcpy(COUNTRY::name, name); }
 void COUNTRY::SetForm (char* form) { strcpy(COUNTRY::form, form); }
 void COUNTRY::SetSq (double sq) { COUNTRY::sq=sq; }
 
 char* COUNTRY::GetName() { return name; }
 char* COUNTRY::GetForm() { return form; }
 double COUNTRY::GetSq() const { return sq; }
 
 void COUNTRY::massivS()
 {
  COUNTRY p[3];
  p[0].Set("Italy", "Monarchy", 144634.4);
  p[1].Set("Andorra", "Monarchy", 345344.4);
  p[2].Set("Belarus", "Presidential Republic", 234246.5);
    for (int i=0; i<3; i++)
        p[i].print();
 }
 
 void COUNTRY::massivD()
 {
  COUNTRY* h;
  h=new COUNTRY [3];
  h[0].Set("Latvia", "Parliamentary Republic", 546546.7);
  h[1].Set("Greece", "Parliamentary Republic", 45355.6);
  h[2].Set("Germany", "Federal Parliamentary Republic", 342443.9);
    for (int i=0;i<3;i++)
     h[i].print();
 }
 
 void main ()
 {
  clrscr();
  COUNTRY a;
    cout << "--Konstryktor s ymalchivaemimy paramentramy--" << endl;
    a.print();
 
    cout << "--Konstryktor s paramentramy--" << endl;
  COUNTRY w("Spain", "Monarchy", 984571.9);
     w.print();
 
  COUNTRY n=w;
  cout << "--Konstryktor kopirovaniya--" << endl;
  n.print();
  char name[size];
  char form[size];
  double sq;
    cout << "Strana? ";
     cin >> name;
    cout << "Forma pravleniya? ";
     cin >> form;
    cout << "Ploshad? ";
     cin >> sq;
    cout << endl;
  w.Set(name, form, sq);
  n=w;
    cout << "--Konstryktor s ymalchivaemimy parametrami--" << endl;
     a.print();
    cout << "--Konstryktor s parametrami--" << endl;
     w.print();
    cout << "--Konstryktor kopirovaniya--" << endl;
     n.print();
     cout << "Najmite ENTER dlya vivoda dinamicheskogo massiva" << endl;
     getch();
     cout << "--Dinamicheskyi massiv--" << endl;
     cout << endl;
     COUNTRY z;
     z.massivD();
     cout << "Najmite ENTER dlya vivoda staticheskogo massiva" << endl;
     cout << endl;
     getch();
     cout << "--Staticheskyi massiv--" << endl;
     COUNTRY y;
     y.massivS();
  getch();
 }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.03.2011, 01:06     Деструктор
Посмотрите здесь:

Деструктор C++
C++ деструктор
Деструктор C++
C++ Деструктор
C++ Деструктор
C++ Почему создается виртуальный деструктор A, а в таблице виртуальных функций лежит деструктор B
C++ Деструктор
C++ Деструктор

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
17.03.2011, 09:36     Деструктор #2
LAans, А как насчет очистить память? если есть new должен быть и delete
Yandex
Объявления
17.03.2011, 09:36     Деструктор
Ответ Создать тему
Опции темы

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