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

Возможно ли явное разрушение объекта класса? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Непонятные символы в output.txt - кодировка http://www.cyberforum.ru/cpp-beginners/thread1223149.html
#include <iostream> #include <algorithm> #include <cmath> using namespace std; int main() { freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); int a,b,d,e,c; cin>>a;
C++ Определить, работают ли в фирме люди с одной из заданных фамилий Известны фамилии всех 30 сотрудников фирмы и их адреса. Определить, работают ли в фирме люди с одной из фамилий: Кузин, Куравлев, Кудин, Кульков или Кубиков. В случае положительного ответа напечатать их адреса. Вот такую вот задачку задали в универе. http://www.cyberforum.ru/cpp-beginners/thread1223141.html
C++ Перегрузить оператор суммирования, не принадлежащий классу
Перегруженный оператор суммирования, который не будет пренадлежать классу и будет работать с 2 объектами двумерных классов (наверное массивов)
Запись в базовый класс информации из наследников C++
Написать перегруженный оператор преобразования типов который будет вытягивать из класса наследников нужную информацию и эту информацию записывать в базовый класс
C++ Классы, которые будут индексировать букву http://www.cyberforum.ru/cpp-beginners/thread1223136.html
Написать 3 класса которые будут индексировать букву
C++ Ошибка деструктора - В конструкторе происходит выход за границу массива Доброго времени. #include <iostream.h> #include <math.h> class OKTAVE { public: OKTAVE(unsigned int Leng) { подробнее

Показать сообщение отдельно
TierX
20 / 20 / 0
Регистрация: 28.02.2014
Сообщений: 138

Возможно ли явное разрушение объекта класса? - C++

05.07.2014, 23:43. Просмотров 703. Ответов 23
Метки (Все метки)

Код (класс матрицы)
Кликните здесь для просмотра всего текста

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 <assert.h>
using namespace std;
class MATRIX_us{
private://V
    int counter;
    int row;
    int col;
    int**p;
public://CD
    MATRIX_us(int a, int b)
    {row=a;col=b;counter=0;
     p=new int*[row];
     for(int i=0;i<row;i++)
         p[i]=new int [col];
 
     for(int i=0;i<row;i++)
         for(int j=0;j<col;j++)
         p[i][j]=(11+j)+(10*i);
         cout<<"created"<<endl;}
 
    ~MATRIX_us(){
        for(int i =0;i<row;i++)
        delete []p[i];cout<<"destroyed col"<<endl;
        delete []p;   cout<<"destroyed row"<<endl;}
public://F
    void Show(int a, int b){cout << p[a][b];cout<<endl;}
    void Set(int a, int b, int c){p[a][b]=c;}
    void ShowAll(){
     for(int i=0;i<row;i++)
         for(int j=0;j<col;j++){
             cout<<p[i][j]<<' ';counter++;
             if(counter==row){cout<<endl;counter=0;}}}};
 
 
int main() {
 
    MATRIX_us a(2,2);
           //a.~MATRIX_us();  <-- ???
    system("PAUSE");
    }

Вобщем можно ли както удалить обьект класса явно? Пытался через явный вызов деструктора(с чего и началось) но класс остался полуживой.Компилятор может дальше использовать методы класса не ругаясь.
По завершению програмы вылетает:
Необработанное исключение по адресу 0x5EAE7508 (msvcr110d.dll) в удаляй1.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xFEEEFEE2.
Без понятия что это, но явно чтото не ок. Вобщем не получаетсо. Зачем тогда предусмотрен явный вызов деструктора?

И еще интересно тот же вопрос про указатель:
1)Как инициализированый ранее указатель явно привести в нерабочюю форму (типа начального *ptr=NULL можно ли так после инициализации делать?)
2)Как удалить его.

Насколько я понимаю все обьекты/переменные/функции созданые в main идут на стек но как их оттуда удалять явно?(аля new/delete)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 12:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru