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

Чтобы не было утечек памяти - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ чтение файла в массив http://www.cyberforum.ru/cpp-beginners/thread381490.html
Дан файл из трех строк. Первая строка содержит две цифры о длине следующих строк, нужно проверить одинаковые ли элементы в след строках или нет. Пример: 3 5 1 2 3 1 2 3 4 5 или такой пример: 2 4 6 8 5 7 9 3 Помогите решить....
C++ Единицы Помогите пожалуйста, кому не сложно сделать задачку, ребят. Заранее огромное спасибо Найдите двоичное число с наименьшим числом единиц, дающее остаток P при делении на R. Ввjд В первой строке входного файла заданы натуральные числа P и R (0<=P<R, 1<=R<=1000). Вывод Выведите двоичное число, удовлетворяющее требованию задачи. Если решений несколько, выведите любое из них Пример: http://www.cyberforum.ru/cpp-beginners/thread381488.html
C++ Найти сумму ряда
Составить алгоритм и написать программу на языке С – консольное приложение, выполняющую набор действий, заданный соответствующим вариантом. Программа должна работать в текстовом режиме, обеспечивать процедуры запроса и ввода данных, сопровождающиеся соответствующими пояснениями. В случае, когда в программе выполняются действия над массивами данных, программный диалог должен начинаться с запроса...
C++ Оператор If
Всем доброго времени суток. Такой вопрос, мне нужно задать условие : baza.time >= 30 и в тоже время baza.price < 100000 чтобы вывести товар хранящихся больше месяца, стоимость которых превышает 100 000 р. Но как это записать? Я так понял нужно использовать && но у меня что то не получается Делаю так : if ((baza.time) >= 30) && (baza.price < 1) Ругается
C++ С++ ошибки http://www.cyberforum.ru/cpp-beginners/thread381451.html
Задание 1. Дано число a. Не используя никаких операций, кроме умножения и присваивания, составить программу, вычисляющую a7 за 4 операции умножения; 1. int main() { b = a*a; c = b*b; d = a*b*c; // d =a^7;
C++ Программные реализации быстрого возведения в степень реализовать быстрое возведение в степень числа минимальным количеством умножения подробнее

Показать сообщение отдельно
Bers
Заблокирован
11.11.2011, 00:31     Чтобы не было утечек памяти
Цитата Сообщение от Svinina Посмотреть сообщение
А как в таком случае победить это?
Это правильный вопрос. Если класс не является владельцем объектов, значит он не контролирует время жизни этих объектов.

Но он хранит указатели на них не просто так, а для того, что бы иметь возможность обратиться через них к этим объектам.
И поэтому, ему очень важно иметь возможность узнать - а эти объекты вообще ещё живы?

Как это можно сделать? Способов много. Опять таки, зависит от конкретной задачи.
Один из способов - использовать не обычные указатели, а "интеллектуальные" указатели.
Что это такое, как они работают, и как их можно применять - узнайте у гугла.
Если будит потом ещё что-то непонятно - спрашивайте.

Но лично я стараюсь по возможности не прибегать к услугам интеллектуальных указателей.
Я бы скорее всего использовал что то вроде вот такого алгоритма:

1. При создании объекта, он получает знание о том, где лежит его "регистрационный массив данных". И тут же, при создании, он регистрирует свой собственный указатель в этом регистрационном массиве.

2. При уничтожении, объект в своем диструкторе удаляет запись о себе из этого регистрационного массива.

3. Таким образом, любой объект, зная где лежит регистрационный массив, в любой момент времени может получить данные обо всех "живых" себе подобных объектах.

4. Очень важно гарантировать, что регистрационный массив не будит уничтожен прежде, чем подохнет последний из объектов, которые его эксплуатируют (см "интеллектуальные указатели")

5. Если по задаче "регистрационный массив" должен быть только один на все объекты класса, то можно сделать его "статическим данным-членом" (см "статические данные-члены класса").


Цитата Сообщение от Svinina Посмотреть сообщение
И еще, если clear в деструкторе не выполнить, указатели лежащие в нем так и будут в памяти болтаться образуя утечку?
Когда вы делаете вектору метод clear() то, вектор полностью освобождает свою память.
То есть, он вызывает диструкторы всем элементам, которые содержит, а потом полностью удаляет память, которую эти элементы занимали.

Если вектор содержит только указатели - то память, которую занимали эти указатели будит освобождена. Но! Освобождена будит память, которую занимали сами указатели. А память, на которую указывали эти указатели так и останется неосвобождённой.


Добавлено через 1 минуту
Цитата Сообщение от Svinina Посмотреть сообщение
И еще, если clear в деструкторе не выполнить, указатели лежащие в нем так и будут в памяти болтаться образуя утечку?
Вообще, когда у объекта-хозяина закончится время жизни, то будут автоматически разрушены все его данные-члены, созданные на стеке. Для них автоматически будут вызваны ихние диструкторы.

У вектора диструктор вызывает метод clear() Таким образом, при разрушении, вектор сам автоматически чистит за собой.
 
Текущее время: 15:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru