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

Coding style или нет - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ потоки выполнения c++ http://www.cyberforum.ru/cpp-beginners/thread443624.html
В чем вся соль потоков(нитей)? Порекомендуйте мне литературу или ссылку дайте на годную статью, а то ничего не понял
C++ Работа с консольным окном Здравствуйте! Может ли программа узнать размеры консольного окна? (Требуется что-то вроде окна в Турбо паскале 7.0.) А так же может ли сама программа изменять шрифт и размер шрифта в консольном окне? Цвет фона и шрифта? И если вы знакомы с функцией system() и знаете местечко с подробным описанием этой функции, выложите, пожалуйста. http://www.cyberforum.ru/cpp-beginners/thread443622.html
C++ Написать класс для эффективной работы со строками
Написать класс для эффективной работы со строками, что позволяет форматировать и сравнивать строки, хранить в строках числовые значения и извлекать их. Для этого необходимо реализовать: • перегруженные операции присвоения и конкатенации; • операции сравнения и приведения типов; • преобразование в число любого типа; • форматный вывод строки. Написать программу, демонстрирующую работу с этим...
Вывести несколько строк в файл C++
Условие #include <iostream> #include <fstream> #include <iomanip> #include <cstring> const int N=100; std :: ifstream input; std :: ofstream output;
C++ Создайте общий массив, из данного массива и точно такого же но другого размера, и отсортируйте по уменьшению. http://www.cyberforum.ru/cpp-beginners/thread443580.html
Создайте общий массив, из данного массива и точно такого же но другого размера, и отсортируйте по уменьшению.
C++ Определите сумму элементов массива, расположенных после элемента равного минимуму. Определите сумму элементов массива, расположенных после элемента равного минимуму. подробнее

Показать сообщение отдельно
Evg
Эксперт CАвтор FAQ
17647 / 5871 / 379
Регистрация: 30.03.2009
Сообщений: 16,178
Записей в блоге: 26
10.02.2012, 14:00
Цитата Сообщение от AzaKendler Посмотреть сообщение
и если кровь из носа надо очистить память на которую ссылаются члены класса то вызов деструктора в том месте сделает это
Если вопрос стоит как кровь из носа, то вместо использования объекта использовать динамическое выделение памяти. И искусственно в это место засовывать placement new вовсе не к чему. Говоря про удобство и неудобство я имел в виду работу именно с ПЕРЕМЕННЫМИ типа класса, для которых компилятор АВТОМАТИЧЕСКИ вызывает конструкторы и деструкторы. Т.е. у тебя нет никакой возможности забыть вызвать деструктор

А проблема в общем случае не в том, чтобы освободить память, занимаемую экземпляром класса (как ты приводил в сових примерах). Экземпляр класса std::string занимает совсем немного места. Проблема в том, что экземпляр класса в момент создания внутри себя заводит динамически выделяемую память, которую можно освободить только удалив экземпляр класса.

Т.е. на Си я могу написать код:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct String str;
...
 
/* Как бы вызов конструктора, который я могу вставлять там, где мне заблагорассудится */
InitString (&str);
 
/* Поработали с экземпляром */
 
/* Как бы вызов деструктора, который я также могу вставлять там, где мне заблагорассудится */
ClearString (&str);
 
/* И могу даже повторно вызвать как бы конструктор (ибо захотелось мне повторно
 * проинициализировать существующий объект) */
InitString (&str);
На Си++ это выразить никак нельзя. Потому что конструктор может вызываться только автоматически и только при создании переменной. Аналогично деструктор. Единственное, что можно сделать в Си++ - так это вместо объектов использовать указатели и рожать-удалять объекты через new/delete, что, вобщем-то, совсем неэффективно. Понятно, что ровно такой код с вызовами функций можно написать и на Си++, но это уже как бы не есть программирование на Си++
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru