Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Объясните действие деструкторов в коде


Автор: observateur 30.9.2006, 17:06
Код
#include "stdafx.h"
#include <iostream>
using namespace std;
class box1
{
private: int* ptr;

public: box1(int* tptr)
        {
            ptr=tptr;
        }
        ~box1()
        {
            delete ptr;
            cout<<"ukazatel ptr udaleno. "<<endl;
        }

        void show()
        { cout<<ptr<<endl; }
};
void main()
{
    int a=5;
    int* b=&a;

    box1 bx(b);
    bx.show();


}

помогите мне подробно пожалуйста (вернее опишите мне подробно) когда этот код выпольняеться что происходит (объясните по этапам пожалуйста ).
Я никак не могу понят если деструктор удаляет объекта после завершении main() тогда как это может влиять вывода текста на экран. (будьте терпеливый )  

Автор: ptr 30.9.2006, 17:51
Создаётся объект типа box1. Вызывается метод show. Далее вызывается деструктор для bx. Удаляется то, что лежало по адресу в ptr smile (не хорошо использовать delete для не динамических объектов) и печатается строка.

Цитата(observateur @  30.9.2006,  21:06 Найти цитируемый пост)
Я никак не могу понят если деструктор удаляет объекта после завершении main() тогда как это может влиять вывода текста на экран. (будьте терпеливый )  

Деструктор вызывается не после завершения main, а при завершении. Он вызывается перед "}" smile . Например:
Код

int main()
{
    int a=5;
    int* b=&a;

    {
        box1 bx(b);
        bx.show();
    }

    cout<<"test";
    return 0;
}

Автор: Oleg_Ci 30.9.2006, 18:19
Я понял тебе надо увидеть строку которая выводится при сробатывании деструктора, тогда создавай объект в отдельной функции а не в main . Так должно сработать
Код

#include "stdafx.h"
#include <iostream>
using namespace std;
class box1
{
private: int* ptr;

public: box1(int* tptr)
        {
            ptr=tptr;
        }
        ~box1()
        {
            delete ptr;
            cout<<"ukazatel ptr udaleno. "<<endl;
        }

        void show()
        { cout<<ptr<<endl; }
};

void fun()
{
int a=5;
    int* b=&a;

    box1 bx(b);
    bx.show();
}

void main()
{
    fun();

}

Автор: ptr 30.9.2006, 18:25
Цитата(Олег4 @  30.9.2006,  22:19 Найти цитируемый пост)
создавай объект в отдельной функции а не в main

И в чём разница?

Автор: Oleg_Ci 1.10.2006, 04:45
Цитата
И в чём разница?
Втом что строку увидеть можно, которую деструктор пишет. Ещё надо-было system("pause") в конце поставить, я забыл.

Автор: ptr 1.10.2006, 06:53
Цитата(Олег4 @  1.10.2006,  08:45 Найти цитируемый пост)
Втом что строку увидеть можно, которую деструктор пишет. Ещё надо-было system("pause") в конце поставить, я забыл.

Её и раньше можно было увидеть.

Автор: Oleg_Ci 1.10.2006, 08:51
Цитата
Её и раньше можно было увидеть.
Ну тогда я снимаю свою удею с функцией...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)