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

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

Восстановить пароль Регистрация
 
 
TierX
 Аватар для TierX
19 / 19 / 0
Регистрация: 28.02.2014
Сообщений: 138
05.07.2014, 23:43     Возможно ли явное разрушение объекта класса? #1
Код (класс матрицы)
Кликните здесь для просмотра всего текста

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)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.07.2014, 23:43     Возможно ли явное разрушение объекта класса?
Посмотрите здесь:

Возможно ли создание объекта шаблонного класса в функции этого класса? C++
объявление объекта одного класса в описании другого класса C++
C++ Ошибка компиляции (преобразование объекта класса в объект другого класса)
Использование объекта одного класса при создании нового класса C++
В строке первого объекта класса слово MAX длины заменить на слово MAX длины второго объекта класса C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
TierX
 Аватар для TierX
19 / 19 / 0
Регистрация: 28.02.2014
Сообщений: 138
06.07.2014, 02:01  [ТС]     Возможно ли явное разрушение объекта класса? #21
что конкретно проверяет if(p) ? сщесвтвует ли он? инициализирован чемто?

Да но помоему подругому(проще) реализовать клас матрицы в динамической памяти нельзя.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
6460 / 3834 / 885
Регистрация: 30.01.2014
Сообщений: 6,629
06.07.2014, 02:07     Возможно ли явное разрушение объекта класса? #22
Цитата Сообщение от TierX Посмотреть сообщение
вобщем я пока вижу только 1 вариант это крепить объекты на указатель через new.
Может быть стоит разобраться с идеологий С++?
Пока что, как мне кажется, здесь больше твое непонимание играет, чем какие-то реальные проблемы.
Выделять абсолютно всю память в динамической памяти может быть очень накладно.

Добавлено через 1 минуту
Цитата Сообщение от TierX Посмотреть сообщение
что конкретно проверяет if(p) ?
Проверяет неравенство нулю.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
06.07.2014, 02:13     Возможно ли явное разрушение объекта класса? #23
Цитата Сообщение от TierX Посмотреть сообщение
Да но помоему подругому(проще) реализовать клас матрицы в динамической памяти нельзя.
Вообще, если отвлечься, внутри класса лучше бы выделять один массив размером rows * collumns, а не массив указателей на массивы...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.07.2014, 02:29     Возможно ли явное разрушение объекта класса?
Еще ссылки по теме:

C++ Создание и разрушение объектов класса, исследование вызовов конструкторов и деструкторов
Явное создание экземпляра класса и явная специализация шаблона класса C++
Указатель на объект базового класса и адрес объекта производного класса C++

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

Или воспользуйтесь поиском по форуму:
TierX
 Аватар для TierX
19 / 19 / 0
Регистрация: 28.02.2014
Сообщений: 138
06.07.2014, 02:29  [ТС]     Возможно ли явное разрушение объекта класса? #24
Тут больше не идеалогия а правильная архитектура создания/хранения обьектов. Мне пока не известна альтернатива new в этом плане. Да и вобще архитектура программ для меня это пока попаболь ) думаю в скором времени повторить попытку второго тома Эккеля осилить может там научусь этому.(Философия C++. Практическое программирование.)

Добавлено через 6 минут
Да про одномерный масив согласен

Добавлено через 59 секунд
Спасибо вам еще раз добрые люди.
Yandex
Объявления
06.07.2014, 02:29     Возможно ли явное разрушение объекта класса?
Ответ Создать тему
Опции темы

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