Форум программистов, компьютерный форум 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
Заблокирован
10.11.2011, 23:39     Чтобы не было утечек памяти
Здесь налицо архитектурная ошибка.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int main()
{
node *a = new node;
node *b = new node;
node *c = new node(&a, &b);  //кто владелец данных?
//....
delete c;  //мы можем убить любой объект. 
              //А объект в этот момент может держать
              // указатели на другие себеподобные объекты.
              // Может получится ситуация, когда объект 
              //будит держать ссылки на уже убитые объекты. 
              //Это может привести к печальным последствиям.
 
//тут c больше нигде не используется, а a и b используются
delete a;  //А если объект с считает себя владельцем 
               //собственных данных, и попытается сделать 
               //им delete в своём диструкторе? 
               //Не получится двойного delete одному 
               //участку памяти?
delete b;
return 0;
}
Нарушение инкапсуляции. Класс не в состоянии обеспечить безопасность собственных данных.

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

1. разработчик класса не установил четких правил владения данными. Не понятно, кто является владельцем данных - указатели извне класса, или указатели изнутри класса?

2. Отсутствует разделение ответственности между классом и вызывающей стороной за работоспособность процесса.

3. Если владелец данных - класс, то наружная сторона не должна никаким образом иметь указатели на внутренние данные класса.

Иначе, считай , что уже имеем нарушение инкапсуляции: данные ничем никак не защищены, а наружная сторона сможет сделать с ними все что угодно. Например сделать им delete.
 
Текущее время: 11:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru