Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
6 / 4 / 3
Регистрация: 28.10.2014
Сообщений: 149

Различие между оператором new и ключевым словом new

16.07.2018, 17:08. Показов 1948. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Решая эту задачу https://stepik.org/lesson/563/step/7?unit=886 набрёл на статью которая меня очень заинтересовала https://habr.com/post/185662/ . Прочитав её я не очень понял эти различия. Поискал в интернете и тоже не очень разобрался. Расскажите ,пожалуйста ,с примером в чём же там отличие .
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.07.2018, 17:08
Ответы с готовыми решениями:

Перестановочный шифр с ключевым словом
Помогите, нужно сделать программу что будет зашифровывать и расшифровывать текст с помощью перестановочного шифра. Буквы открытого...

Работа с ключевым словом const
Всем мира! Снова приходится обращаться к вам, дорогие форумчане за разъяснением вот какой штуки. Сейчас изучаю Эффективное Использование...

Шифрование/дешифрование шифра Трисемуса с любым ключевым словом
Помогите,пожалуйста написать программу по шифровке и дешифровке шифра Трисемус с любым ключевым словом в С++.

12
Shiningemerald
 Аватар для Electroflower
384 / 117 / 22
Регистрация: 05.01.2012
Сообщений: 951
16.07.2018, 17:32
Что касается POD:
если пишешь new A(); -как правило вызываешь и конструктор(инициализация нулями), если new A; то неопределенное значение.
0
183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515
16.07.2018, 18:09
Цитата из статьи, на которую вы ссылаетесь:
Приведенный код подтверждает все, написанное выше, а именно:
1. оператор (языка) new и operator new() — это НЕ одно и тоже.
2. operator new() НЕ вызывает конструктор(ы)
3. вызов конструктора(ов) генерирует компилятор, встречая в коде key-word «new»
Что из этого вам не понятно?
1
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
16.07.2018, 18:54
https://www.cyberforum.ru/post8812933.html
http://pcdev.ru/cpp-memory-management-part2/
1
6 / 4 / 3
Регистрация: 28.10.2014
Сообщений: 149
23.07.2018, 23:00  [ТС]
Благодаря Croessmah я уже разобрал "теоретическую" разницу между operator new key-word(expression) new .
Мне осталась не совсем понятна их реализация . Можете на примере показать использование этих разных new .
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
24.07.2018, 00:28
Цитата Сообщение от yuriybolotin99 Посмотреть сообщение
Можете на примере показать использование этих разных new .
У Майерса в одной из старых книг есть примеры с реализациями.
Там есть и хорошее теоретическое обоснование всех нюансов.
Извиняюсь, что даю лишь ссылку, но никто лучше не объяснит такие вещи.
В реальности мне перегрузка new понадобилась ровно 0 раз.
Думаю, что у многих такая же ситуация, отсюда и настолько невысокая освещённость вопроса.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
24.07.2018, 03:42
Цитата Сообщение от yuriybolotin99 Посмотреть сообщение
Благодаря Croessmah я уже разобрал "теоретическую" разницу между operator new key-word(expression) new .
Мне осталась не совсем понятна их реализация . Можете на примере показать использование этих разных new .
С реализацией все просто как мычание. Допустим, вы хотите выделять память в самописном хипе.
1) Пишите operator new(std::size_t size,MyHeap&heap) и вызываете его через new (myHeap) Object.
2) Пишите operator delete(std::size_t size,MyHeap&heap) и вызываете его через delete (myHeap) Object.
3) Пункт 2 не компилируется. Матерясь сквозь зубы выкидываете new/delete, выделяете память через myHeap.create<Object>(), освобождаете через myHeap.destroy(pointer).
3.1) Хотя нет, лучше будем следовать стандартному дизайну - new (Allocator::rebind<Object>::other(alloca tor).allocate(1)) Object. Серьезно, что нужно было употреблять чтобы придумать этот rebind?

Едем далее. Допустим, по каким-то неведомым причинам вам захотелось еще и полиморфизму.
1) Создаем полиморфный объект через BaseClass*object=myHeap.create<DerivedCl ass>(). Менять BaseClass* на DerivedClass* не предлагать - какой тогда смысл в полиморфизме?
2) Удаляем объект через myHeap.destroy(object).
3) destroy грохается так как ему нужен адрес удаляемого объекта, а не одного из базовых классов этого объекта. То что они совпадают никто не обещал.
4) Фигня вопрос! В каждый потомок BaseClass втыкается виртуальная функция вида void*mostDerivedClass(){return this;}. Больше костылей богу костылей!
0
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
24.07.2018, 12:22
Цитата Сообщение от Renji Посмотреть сообщение
2) Пишите operator delete(std::size_t size,MyHeap&heap) и вызываете его через delete (myHeap) Object.
Шта? Кто это пробовать-то будет?
Цитата Сообщение от Renji Посмотреть сообщение
3) Пункт 2 не компилируется. Матерясь сквозь зубы выкидываете new/delete, выделяете память через myHeap.create<Object>(), освобождаете через myHeap.destroy(pointer).
А может быть всё-таки operator new всю нужную информацию сохранит для того, чтобы operator delete смог работать?
Цитата Сообщение от Renji Посмотреть сообщение
Серьезно, что нужно было употреблять чтобы придумать этот rebind?
А может просто нужно почитать зачем он нужен?
0
24.07.2018, 12:34

Не по теме:

О, моя статья всплыла :)

0
24.07.2018, 12:41

Не по теме:

Цитата Сообщение от Kastaneda Посмотреть сообщение
О, моя статья всплыла :)
Какая? =-O

0
24.07.2018, 13:11

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
Какая? =-O
на хабре, в первом посте, ник автора посмотри)

0
24.07.2018, 13:32

Не по теме:

Kastaneda, ну раз всплыла, значит хорошая статья. :D

0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
24.07.2018, 14:04
Цитата Сообщение от Croessmah Посмотреть сообщение
А может быть всё-таки operator new всю нужную информацию сохранит для того, чтобы operator delete смог работать?
Когда мы пилим новый стандарт: сохранять размер выделенной памяти и создавать оверхед в одно число? Нетушки, сами храните этот размер и передавайте в наш новый operator delete(void*,std::size_t)!
Когда всплыла кривость стандарта: сохранять адрес хипа и создавать оверхед в один указатель? Да вы че, нормальная же практика!
Цитата Сообщение от Croessmah Посмотреть сообщение
А может просто нужно почитать зачем он нужен?
"The member template class rebind provides a way to obtain an allocator for a different type". Напрямую создавать different type объекты STL аллокаторы не умеют. Только через "ребиндь новый аллокатор и пинай его".
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.07.2018, 14:04
Помогаю со студенческими работами здесь

Как зашифровать текст из файла шифрованием Цезаря с ключевым словом?
в общем дан текст в файле.Нужно зашифровать его, например, с помощью кода Ascii, и записать в другой файл. нет даже предположений, так как...

Цезарь с ключевым словом
Всем привет. Может у кого есть реализация в Delphi это алгоритма или кто может написать за плату?

Поиск по ключевым словом
Плиз помогите я делаю справочник по С++ все сделал, но вот проблема с поиском код есть и выводит он только ключвое слово которое указано в...

Шифр цезаря с ключевым словом
Здравствуйте. Мне необходимо реализовать программу дешифровки цезаря с ключевым словом. Я использую метод частотного анализа, и проверки...

Шифр цезаря с ключевым словом
Помогите реализовать программу,пожалуйста? Процедур шифрования и расшифрования с использованием шифра Цезаря при вводе с клавиатуры ключа и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru