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

Про деструктор и утечку памяти - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Создать exe, запускающий exe http://www.cyberforum.ru/cpp/thread446459.html
Говорю сразу: я ничего не смыслю в програмировании; зачем подался на такой форум? Надеюсь получить ответ на свой вопрос,упавая на то, что его реализация не такая сложная. У меня возникла...
C++ Странное поведение bool Помогал отлаживать код и мы наткнулись на удивительное. Кодер скрыл отображение варнингов в VS2010. Метод М1 не всегда возвращал значение типа bool. И потому в методе М2, вызывающем метод М1,... http://www.cyberforum.ru/cpp/thread445695.html
Как средствами BC 3,1 запросить свободное место на указанном жёстком диске? C++
Извиняюсь, если создал лишнюю тему, но ничего по своей проблемке я вроде не заметил. Если что-то есть, поправьте. А вопрос в следующем: как средствами BC 3,1 запросить свободное место на указанном...
C++ Указания адреса функции
Есть библиотека. Нужно чтобы функция в моей библиотеке указывала на функцию в чужой. Вот мой код: typedef int (WINAPI WJMP)(); extern "C" __declspec(dllexport) WJMP Test(void); *Test=...
C++ Как аннулировать потоки, которые заблокированы по переменной условия (pthread)? http://www.cyberforum.ru/cpp/thread444520.html
И никак, что ли не аннулировать, получается? Вот, допустим, есть несколько потоков которые заблокированы по переменной условия: pthread_mutex_lock (&mutex); if (!(mozno_idti)) { ...
C++ Есть 4 потока. После осуществления блокировки барьером, 3 куда-то деваются, куда? (pthreads) Друзья! Как мог упростил код, вот суть В цикле создаются 4 вспомогательных потока, кадый из которых в цикле же 2 раза выводит свой TID. После первого вывода TIDа каждым потоком срабатывает... подробнее

Показать сообщение отдельно
Евгений М.
1036 / 977 / 54
Регистрация: 28.02.2010
Сообщений: 2,829
Завершенные тесты: 2

Про деструктор и утечку памяти - C++

15.02.2012, 18:04. Просмотров 862. Ответов 4
Метки (Все метки)

Доброе время суток.
Вот что дано:
Symbols.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <string>
#include <vector>
 
class Symbols
{
protected:
    void add(std::string str); // добавления символа
    virtual void inputData() = 0; // заполнение вектора data нужными символами
    std::vector<std::string> data;
    
public:
    ~Symbols();
    
    std::string at(int i);
    
    static const int alpha  = 0;
    static const int beta   = 1;
};

Symbols.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "Symbols.h"
 
Symbols::~Symbols()
{
    data.clear(); // очищаем память
}
 
void Symbols::add(std::string str)
{
    data.push_back(str);
}
 
std::string Symbols::at(int i)
{
    return data.at(i);
}

SymbolsLaTeX.h
C++
1
2
3
4
5
6
7
8
9
#include "Symbols.h"
 
class SymbolsLaTeX: public Symbols
{
protected:
    void inputData();
public:
    SymbolsLaTeX();
};

SymbolsLaTeX.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include "SymbolsLaTeX.h"
 
SymbolsLaTeX::SymbolsLaTeX()
{
    inputData(); // сразу-же заполняем массив
}
 
void SymbolsLaTeX::inputData()
{
    add("\\alpha");
    add("\\beta");
}

main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include "SymbolsLaTeX.h"
#include <iostream>
 
using std::cout;
using std::endl;
 
int main()
{
    Symbols* sym = new SymbolsLaTeX();
    
    cout << sym->at(Symbols::beta) << endl;
    delete sym; // по идеевызывается деструктор ~Symbols
}

Кратко: каждый наследник класса Symbols отличается содержимым data (у нас только один наследник - SymbolsLaTex). Процедура inputData заполняет этот массив, вызывается только 1 раз в конструкторе наследника.
Вопрос 1: если НЕ пытаться переопределить деструктор ~Symbols, то всегда ли (по теории) будет вызываться этот же деструктор?
Вопрос 2: если деструктор успешно вызывается, то останится ли член data в памяти? Или по другому, будет ли утечка памяти?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru