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

Как выглядит изнутри динамическое выделение объекта через new? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ new - это операция или все таки оператор? http://www.cyberforum.ru/cpp-beginners/thread810541.html
В большинстве интернет-источниках написано, (взять хоть википедию (да, я понимаю, что там много неправильной информации)). Но действительно, если вбить в поиск new c++ почти везде написано, что это оператор. Но ведь это операция?? Или я что то путаю? Или разницы нет? Помогите, я уж совсем запуталась.
C++ Указатель Можете объяснить устройство работы ,мне казалось что если вызвать просто ptr то должен возвратиться адрес,а если * ptr ,то значение,здесь же совершенно все не так int main() { char *ptr="hello world"; cout<<ptr<<endl; cout<<*ptr; getch(); return 0; } http://www.cyberforum.ru/cpp-beginners/thread810537.html
Строковые типы данных C++
Ввести с клавиатуры строку из 20-ти или меньшего числа символов и найти в строке сумму и количество всех цифр. Язык С++(дано: ввод в Edit1 и вывод в Edit2 и Edit3).
C++ Строковые типы данных (заменить все прописные (большие) буквы латинского алфавита строчными (маленькими))
Ввести с клавиатуры строку и заменить все прописные (большие) буквы латинского алфавита строчными (маленькими). Язык С++ (дано Edit1 и вывод в Edit2).
C++ Организовать обход в глубину http://www.cyberforum.ru/cpp-beginners/thread810532.html
Искал код, не смог найти подходящий. Цель следующая - первым обходом ищем все шарниры, а вторым нужно найти для каждого шарнира, на сколько компонент связности дробит граф этот шарнир и сколько в каждой компоненте останется вершин. Было бы вообще великолепно, если бы было возможно реализовать это одним обходом. Поделитесь, пожалуйста, кодом по этому вопросу, или идеями, если есть :)
C++ консольное приложение (при запуске приложение открывалось на весь экран) Как сделать, чтобы при запуске приложение открывалось на весь экран? подробнее

Показать сообщение отдельно
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
17.03.2013, 03:04     Как выглядит изнутри динамическое выделение объекта через new?
Разница зависит от высоты точки обзора.
Если с самой низкой высоты посмотреть (на ассемблерный код) - то разница определенно будет.
Если с самой высокой - то разницы нет. динамическое создание объекта состоит из двух шагов:
1 выделение памяти
2 инициализация байтов в этой выделенной памяти.

Рассмотрим с точки посередине:
Выделение памяти: в сях и в плюсах используются разные функции. в плюсах из функциии выделения памяти может вылететь исключение.

Конструирование: В сях и в плюсах вызывается какой-то код инициализации. В сях этот код полностью рукописный, в плюсах присутствует как рукописный код, так и код, вставляемый компилятором:
это код для вызова конструкторов базовых классов и мемберов в нужном порядке, это код для отслеживания уже созданных объектов, это код отлова исключений и вызова деструкторов уже сконструированных базовых классов и мемберов, это код инициализации всяких таблиц виртуальных функций и поддержки RTTI, это код, связанный с поддержкой спецификации исключений, это еще что-то, о чем я не вспомнил или не знаю.

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

Добавлено через 6 минут
на счет Placement new можно использовать для оптимизации, избавляясь от лишних вызовов выделения памяти если известен размер объектов. В классике создается массив чаров нужного размера. И объект конструируется в этом массиве. В векторе используется. Емкость вектора >= количеству элементов в векторе. По мере роста размера вектора, если есть зарезервированная память, то объекты создаются в ней. Иначе - перераспределение.
 
Текущее время: 18:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru