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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
sergey_viper
9 / 3 / 1
Регистрация: 15.04.2012
Сообщений: 185
#1

Удаление объекта класса - C++

03.06.2013, 19:50. Просмотров 1906. Ответов 3
Метки нет (Все метки)

Помогите с удалением объекта класса:
C++
1
2
3
4
5
6
void badstuddel(Student spis[], int n)
    {
        for(int i=0;i<n;i++)
        if(spis[i].getpoint()<4)
          delete (* spis)[i];
    }
ВЫдаёт:
C++
1
C:\Users\Сергей\Downloads\mod7rand (2).cpp|105|error: no match for 'operator[]' in '* spis[i]'|
Если же я делаю просто:
C++
1
2
3
4
5
6
void badstuddel(Student spis[], int n)
    {
        for(int i=0;i<n;i++)
        if(spis[i].getpoint()<4)
          delete spis[i];
    }
То:
C++
1
C:\Users\Сергей\Downloads\mod7rand (2).cpp|105|error: type 'class Student' argument given to 'delete', expected pointer|
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.06.2013, 19:50     Удаление объекта класса
Посмотрите здесь:

Удаление объекта класса из контейнера - C++
Подскажите пожалуйста как правильно удалить обьект. MyCarDeque.push_front(*CreateNewCar()); Так добавлял обьект в очередь. Car...

Удаление поля объекта класса - corruption of the heap - C++
в методе класса abc; for(int i=0;i&lt;5;i++) { abc temp; temp=*this;//в перегрузке присваивания выделяется память под...

удаление объекта - C++
Суть проблемы: Все происходит в одном классе. Создаю в одной функции объект. Например в .h файле пишу Bitmap* bitmap. А в .cpp bitmap = new...

Удаление объекта - C++
Добрый вечер! Я бы хотел уточнить. Если у нас есть такая структура, class A{ private: public: A(); ~A(); };

Удаление объекта из <vector> - C++
Подскажите, пожалкуйста Имею следующий код: EditTest() - friend фукнция для другого класса, в нее мы входим и перемещаемся уже...

Удаление объекта из вектора - C++
Как удалить объект из вектора в таком случае: Main *mn = new Main(wd,100,100); objArray.push_back(*mn);

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
stima
457 / 306 / 24
Регистрация: 22.03.2011
Сообщений: 995
Завершенные тесты: 2
03.06.2013, 19:51     Удаление объекта класса #2
Вы удаляете обьект стека.
C++
1
2
3
4
5
6
void badstuddel(Student* spis[], int n)
{
------
delete spis[i]; //удаление обьекта, при этом Вы должны сами проследить/знать лежит ли обьект в куче или был создан на стеке.
------
}
sergey_viper
9 / 3 / 1
Регистрация: 15.04.2012
Сообщений: 185
03.06.2013, 21:02  [ТС]     Удаление объекта класса #3
Цитата Сообщение от stima Посмотреть сообщение
Вы удаляете обьект стека.
C++
1
2
3
4
5
6
void badstuddel(Student* spis[], int n)
{
------
delete spis[i]; //удаление обьекта, при этом Вы должны сами проследить/знать лежит ли обьект в куче или был создан на стеке.
------
}
Всё равно что-то не то.
Исходник:
Кликните здесь для просмотра всего текста
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
123
124
125
126
127
128
129
130
#include <string.h>
#include <iostream>
 
using namespace std;
 
 
struct points
    {
        int Matan;
        int AGandLA;
        int English;
        int Programming;
        int Molecular;
        int AP;
    };
 
struct date
    {
        char day[3];
        char month[3];
        int year;
    };
 
class Student{
        char name[30];
        date d;
        char adr[30],fac[20] ;
        int kurs;
        points p;
    public:
        Student();
        int getkurs();
        int getpoint();
        void show();
 
};
 
Student::Student()
{
    cout<<"Input name:";
    cin>>name;
    cout<<"Input date of born:\n";
    cout<<"Day:";
    cin>>d.day;
    cout<<"Month:";
    cin>>d.month;
    cout<<"Year:";
    cin>>d.year;
    cout<<"Input adr:";
    cin>>adr;
    cout<<"Input fac:";
    cin>>fac;
    cout<<"Input kurs:";
    cin>>kurs;
    cout<<"Input E.P.:\n";
    cout<<"Mathematical analysis:";
    cin>>p.Matan;
    cout<<"AG&LA:";
    cin>>p.AGandLA;
    cout<<"Programming:";
    cin>>p.Programming;
    cout<<"English:";
    cin>>p.English;
    cout<<"Molecular physics:";
    cin>>p.Molecular;
    p.AP=(p.AGandLA+p.English+p.Matan+p.Molecular+p.Programming)/5;
 
 
 
}
void Student::show()
{
    cout<<"Name:"<<name<<endl;
    cout<<"Was born:"<<d.day<<'.'<<d.month<<'.'<<d.year<<endl;
    cout<<"Address:"<<adr<<endl;
    cout<<"Fac:"<<fac<<endl;
    cout<<"Kurs:"<<kurs<<endl;
    cout<<"E.P.:"<<endl;
    cout<<"Mathematical analysis:"<<p.Matan<<endl;
    cout<<"Programming:"<<p.Programming<<endl;
    cout<<"AG&LA:"<<p.AGandLA<<endl;
    cout<<"English:"<<p.English<<endl;
    cout<<"Molecular physics:"<<p.Molecular<<endl;
    cout<<endl<<endl<<"---------"<<endl<<endl;
}
 
int Student::getpoint() {return p.AP;}
 
int Student::getkurs() {return kurs;}
 
void badstud(Student spis[], int n)
    {
        int i,k;
        cout<<"Input the course:"; cin>>k;
        cout<<endl<<endl;
        for(i=0;i<n;i++)
        if((spis[i].getkurs()==k)&&(spis[i].getpoint()<4))
            spis[i].show();
    }
void badstuddel(Student* spis[], int n)
 
    {
        for(int i=0;i<n;i++)
        if(spis[i].getpoint()<4)
          delete spis[i];
    }
 
 
int main()
{
    Student *spis;
    int n;
    cout<<"Input a number of students:"; cin>>n;
    spis=new Student[n];
    for(int i=0;i<n;i++)
        {
        cout<<endl<<endl;
        spis[i].show();
        }
badstud(spis,n);
badstuddel(spis,n);
    for(int i=0;i<n;i++)
        {
        cout<<endl<<endl;
        spis[i].show();
        }
delete [] spis;
cout<<"Press any key!";
 
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2013, 22:06     Удаление объекта класса
Еще ссылки по теме:

Удаление объекта из контейнера - C++
Доброго вечера... Помогите разобраться... Есть класс А: class A { }; В нем метод В: ... void B (std::deque&lt;А&gt; &amp;С , unsigned...

Удаление объекта по указателю. - C++
Конечно тема избитая, и я находил много решений, но проверить удаляються ли объекты не могу. Есть массив указателей на объекты Record...

Создание объекта класса - C++
Здравствуйте, подскажите пожалуйста в чем разница между Test t(блаблабла); и Test *t = new Test(блаблабла); Я так понимаю что...

Параметры объекта класса - C++
Здравствуйте! Очень мучает следующий вопрос. Вот допустим, есть у нас класс, в нем конструктор: class volume { int a,b,c;...

Манипуляция объекта класса - C++
Как сделать возможной следующую ситуацию: class P { int f; }; ... P p; if(p){}//допустим, относительно значения f

Объявление объекта класса - C++
Доброе время суток! Дело вот в чем: В конструкторе c параметрами класса Piramida, мне нужно создать объект класса M_Ygolnik с...


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

Или воспользуйтесь поиском по форуму:
stima
457 / 306 / 24
Регистрация: 22.03.2011
Сообщений: 995
Завершенные тесты: 2
03.06.2013, 22:06     Удаление объекта класса #4
это выделение и удаление массива обьектов
C++
1
2
A *a = new A[count];
delete[] a;
это выделение и удаление массива указателей на обьекты, а также выделение и удаление обьектов.
C++
1
2
3
4
5
6
7
8
9
10
11
A **a = new A*[count];
for (int i = 0; i < count; ++i)
     a[i] = new A();
 
for (int i = 0; i < count; ++i)
{
     delete a[i];
     a[i] = NULL;
}
 
delete[] a;
Вы можете использовать оба. Оба верны. Просто память управляется по разному. В чем разница?
1. В первом случае, Вы "не удаляете" обьект, а просто "помечаете" его удаленным. А также Вы можете указать место для создание нового обьекта.
C++
1
2
3
A *a = new A[count];
a[5]->~A();
new(a[5]) A;
2. Во втором случае вы удаляете обьект.
C++
1
2
3
A **a = new A*[count];
a[5] = new A;
delete a[5];
3. Как вы заметили второй случай более понятный, но требует перерасхода на память (count * sizeof(void*))

Соответственно Ваши 2 функции должны использовать один из предложенных методов.
Yandex
Объявления
03.06.2013, 22:06     Удаление объекта класса
Ответ Создать тему
Опции темы

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