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

А что происходит в памяти? - C++

Восстановить пароль Регистрация
 
Barmaley
10 / 10 / 1
Регистрация: 09.04.2009
Сообщений: 66
12.03.2012, 20:01     А что происходит в памяти? #1
Привет

Вот код:
(написан с применение фреймворка Qt, но это не влияет на суть вопроса)
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
//main_window.h
#include "Mill.h"
 
class main_window : QWidget
{
    /**/
    explicit main_window(QWidget *parent , Mill &ml);
    ~main_window();
private:
    Mill *pmill;
    Ui::main_window *ui;
    /**/
};
 
//main_window.cpp
#incllude "main_window.h"
 
main_window::main_window(QWidget *parent, Mill &ml) : QWidget(parent),  ui(new Ui::main_window)   
{
    pmill = &ml;
    /**/
}
 
main_window::~main_window()
{
    delete pmill;
    delete ui;
}
 
//main.cpp
#inlcude "Mill.h"
{
    /**/
    Mill *mll = new Mill(name); 
 
    main_window wnd(0, *mll); 
 
    wnd.show();
    return app.exec();
}
Этого кода, по моему мнению достаточно что бы ответить на вопрос.
Что происходит с указателем mll и mill ? Не очищается ли память по этому адресу два раза?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
panicwassano
590 / 558 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
12.03.2012, 20:34     А что происходит в памяти? #2
второй раз у вас вылетит исключение если будете очищать
Barmaley
10 / 10 / 1
Регистрация: 09.04.2009
Сообщений: 66
12.03.2012, 20:42  [ТС]     А что происходит в памяти? #3
На текущий момент в этом коде есть утечки памяти ?
panicwassano
590 / 558 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
12.03.2012, 20:44     А что происходит в памяти? #4
C++
1
2
    Mill *mll = new Mill(name); 
    main_window wnd(0, *mll);
а где delete mll ???
Barmaley
10 / 10 / 1
Регистрация: 09.04.2009
Сообщений: 66
12.03.2012, 21:00  [ТС]     А что происходит в памяти? #5
В этом то и был вопрос.
В функции main у меня создаётся указатель (mll) и начинает указывать на область данных на стэке.
Перехожу в класс main_window.
Создаю еще один указатель (mill) уже в классе main_window который указывает на ту же облать.
Потом я очищаю указатель (delete mill) в классе, таким образом согласно тому как я себе это представляю, я отмечаю выделенную мною область памяти как свободную.
Окошко закрывается.
Закрывается функция main.
Указатель mll выходит из видимости и удаляется.
Ура я ничего не потерял.
У меня есть подозрения, что я чего-то не понимаю.
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
12.03.2012, 21:24     А что происходит в памяти? #6
Цитата Сообщение от Barmaley Посмотреть сообщение
В функции main у меня создаётся указатель (mll) и начинает указывать на область данных на стэке.
Перехожу в класс main_window.
Создаю еще один указатель (mill) уже в классе main_window который указывает на ту же облать.
Потом я очищаю указатель (delete mill) в классе, таким образом согласно тому как я себе это представляю, я отмечаю выделенную мною область
второй раз удалять не нужно если ваше delete mill действительно освобождает память

Добавлено через 4 минуты
класс сам себе удалять не должен , он только должен освобождать память которую занял в результате работы своих методов(функция)
Barmaley
10 / 10 / 1
Регистрация: 09.04.2009
Сообщений: 66
12.03.2012, 21:32  [ТС]     А что происходит в памяти? #7
я думаю, что я могу себе позволить в деструкторе очистить память занимаемую private членом класса
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.03.2012, 21:39     А что происходит в памяти?
Еще ссылки по теме:

C++ Что происходит при вызове?
Почему происходит утечка памяти? C++
C++ Что происходит в этом фрагменте кода?

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

Или воспользуйтесь поиском по форуму:
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
12.03.2012, 21:39     А что происходит в памяти? #8
Цитата Сообщение от Barmaley Посмотреть сообщение
я думаю, что я могу себе позволить в деструкторе очистить память занимаемую private членом класса
если это динамический член -то без проблем

Добавлено через 26 секунд
Цитата Сообщение от Barmaley Посмотреть сообщение
я думаю, что я могу себе позволить в деструкторе очистить память занимаемую private членом класса
если это динамический член -то без проблем
Yandex
Объявления
12.03.2012, 21:39     А что происходит в памяти?
Ответ Создать тему
Опции темы

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