Заблокирован

Поведение оператора new платфоромозависимое?

19.09.2014, 11:04. Показов 3900. Ответов 59
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В случае неудачи оператора new, допустим out of memory, он может кинуть исключение или вернуть ноль:
MSDN:
If unsuccessful, new returns zero or throws an exception
Подскажите, а это поведение так сказать платформ депендет или на всех платформах по дефолту он ведёт себя одинаково. Это же поведение можно поменять ?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.09.2014, 11:04
Ответы с готовыми решениями:

Не понятное поведение тернарного оператора
#include "stdafx.h" #include <initializer_list> #include <iostream> #include <algorithm> int mas =...

Неправильное поведение программы с использованием логического оператора или
while((ch=_getche())!='.') a=a*10+ch-'0'; ch='0'; while((ch=_getche())!='.') b= b*10+(ch-48); ch='0'; ...

Поясните поведение оператора ==
Почему == возвращает false а Equals true ? Для object a = 2; object b = 2; Я знаю что Equals на значимых типах проверяет равенство...

59
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,042
Записей в блоге: 1
19.09.2014, 13:22
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Scrooge McDuck Посмотреть сообщение
Ну где NULL, вызовется foo(int)
а с long: http://ideone.com/mH8FTd
с nullptr ошибки нет: http://ideone.com/IrC3U6
ну а тут вообще вызовется версия для nullptr_t: http://ideone.com/bNtpG2
2
Заблокирован
19.09.2014, 13:39  [ТС]
Ну на счёт предпочтения понял, но всё же, практический выхлоп то от него какой? Как он может быть использован с какой - то целью то? Тем пампаче ноль обычно является возвращаемым значением, а не принимаемым в качестве аргумента функции.
Вот есть у меня функция
C++
1
2
3
4
5
void Kill(Object* obj)
{
if(obj != nullptr)
    delete obj;
}
и что получается, мне этот nullptr_t позволяет написать ещё дополнительную функцию проверки что ли типа:

C++
1
2
3
4
5
6
7
8
void Kill(Object* obj)
{
//ну тут он точно не ноль
}
void Kill(std::nullptr_t)
{
//а если указатель на объект - нулевой указатель, то попадёшь сюда, так что ли ?
}
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
19.09.2014, 13:42
Цитата Сообщение от Scrooge McDuck Посмотреть сообщение
Подскажите, а это поведение так сказать платформ депендет или на всех платформах по дефолту он ведёт себя одинаково. Это же поведение можно поменять ?
Зачем?
В большинстве случаев, если нельзя выделить память(ее не хватает на компе в данный момент) то это уже не поправимо, смысл рыпаться?
1
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
19.09.2014, 13:49
Цитата Сообщение от Croessmah Посмотреть сообщение
почему все в тестовых целях называют функции "ФУУ"
Хоть знать буду, тоже всё никак понять не мог, фуу какая-то
0
Заблокирован
19.09.2014, 13:55  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
В большинстве случаев, если нельзя выделить память(ее не хватает на компе в данный момент) то это уже не поправимо, смысл рыпаться?
Сообщить юзеру, что мол памяти нема И предложить ему закрыть парочку программ или самом в наглую убить что - то
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
19.09.2014, 13:58
Лучший ответ Сообщение было отмечено Scrooge McDuck как решение

Решение

Сообщить юзеру, что мол памяти нема И предложить ему закрыть парочку программ или самом в наглую убить что - то
Разве что только это, но все равно смысла в этом мало. Сомневаюсь что закрытие других процессов поможет сильно.
1
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,042
Записей в блоге: 1
19.09.2014, 14:00
Цитата Сообщение от Avazart Посмотреть сообщение
Сомневаюсь что закрытие других процессов поможет сильно.
может есть возможность освободить память? Например, сохранить часть малоиспользуемых данных на диск.
1
Заблокирован
19.09.2014, 14:09  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
омневаюсь что закрытие других процессов поможет сильно.
Всё, меня задолбала эта ерунда В самом деле, нет памяти - пусть софт падает, никогда ничё проверять даже не буду. Точка Всём спасибо. Осталось обсудить свопинг памяти в hiberfil.sys в Windows для очистки памяти
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2226 / 1428 / 420
Регистрация: 16.05.2013
Сообщений: 3,651
Записей в блоге: 6
19.09.2014, 14:21
Лучший ответ Сообщение было отмечено Scrooge McDuck как решение

Решение

Цитата Сообщение от Scrooge McDuck Посмотреть сообщение
Всё, меня задолбала эта ерунда В самом деле, нет памяти - пусть софт падает, никогда ничё проверять даже не буду.
Допустим пользователь хочет открыть большой файл и вместо сообщения о нехватке памяти его софт рухнет. Замечательно дизайнерское решение.
0
Заблокирован
19.09.2014, 14:35  [ТС]
Цитата Сообщение от Ilot Посмотреть сообщение
Замечательно дизайнерское решение.
А ну да кстати... Тогда new (std::nothrow) и проверять на NULL, nullptr_t как обычно совсем не нужен ...
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
19.09.2014, 14:39
Цитата Сообщение от Ilot Посмотреть сообщение
Допустим пользователь хочет открыть большой файл и вместо сообщения о нехватке памяти его софт рухнет. Замечательно дизайнерское решение.
Вполне нормально, для этого есть требования к системе, или компьютерные игры не падают?

Добавлено через 4 минуты
Цитата Сообщение от Scrooge McDuck Посмотреть сообщение
Всё, меня задолбала эта ерунда В самом деле, нет памяти - пусть софт падает, никогда ничё проверять даже не буду. Точка Всём спасибо. Осталось обсудить свопинг памяти в hiberfil.sys в Windows для очистки памяти
Ну все проверять задолбаешся, и думаю нехватка памяти это именно та вещь которую в большинстве случаев можно не проверять.
0
Заблокирован
19.09.2014, 14:59  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Ну все проверять задолбаешся, и думаю нехватка памяти это именно та вещь которую в большинстве случаев можно не проверять.
Всё, это то, что я и хотел услышать! Ничего не буду проверять!
P.S.: если что, сказу заказчику софта, что мне так посоветовал Avazart с киберфорума
0
19.09.2014, 15:09

Не по теме:

Цитата Сообщение от Scrooge McDuck Посмотреть сообщение
Всё, это то, что я и хотел услышать! Ничего не буду проверять!
P.S.: если что, сказу заказчику софта, что мне так посоветовал Avazart с киберфорума
О да! Это если заказчик софта - студент, готовый заплатить за софт аж сто! рублей.
А в серьезной конторе тебе на первый раз дадут по рукам, а на второй - вежливо предложат зайти в отдел кадров за документами.

0
19.09.2014, 15:21  [ТС]

Не по теме:

Цитата Сообщение от CheshireCat Посмотреть сообщение
А в серьезной конторе тебе на первый раз дадут по рукам, а на второй - вежливо предложат зайти в отдел кадров за документами.
С чего вдруг? Максимум будут некоторые "трения" со смежной конторой тестировщиков :victory:

0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
19.09.2014, 15:28
А за то что код награмажден проверками при каждом
C++
1
сhar ch* = new char[32];
не будут давать по рукам?
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
19.09.2014, 15:32
Зачем что то проверять, когда по умолчанию выбрасывается исключение bad_alloc? Ловить исключение можно в одном месте.
0
Заблокирован
19.09.2014, 15:35  [ТС]
Цитата Сообщение от Toshkarik Посмотреть сообщение
Ловить исключение можно в одном месте.
Да, если изначально функцию WinMain от открывающей скобки до закрывающей обернёшь в try catch

Добавлено через 27 секунд
Цитата Сообщение от Avazart Посмотреть сообщение
не будут давать по рукам?
присоединяюсь к вопросу
0
19.09.2014, 15:36

Не по теме:

лучше перебдеть, чем недобдеть.. (с)

0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
19.09.2014, 15:37
И что в этом плохого? Для этого есть специальная конструкция:


C++
1
2
3
4
5
6
7
8
9
int foo()
try
{
   //some stuff here
}
catch( ... )
{
   ///...
}
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
19.09.2014, 15:41
Цитата Сообщение от Scrooge McDuck Посмотреть сообщение
Да, если изначально функцию WinMain от открывающей скобки до закрывающей обернёшь в try catch
Можно и не оборачивать - есть set_new_handler..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.09.2014, 15:41

Необычное поведение оператора инкремента
Добрый день! Это просто несчастье какое-то. Я пытаюсь посчитать коэффициенты корреляции, рассматривая строку из 16 массивов по 4 бит....

Странное поведение оператора сравнения
Доброго всем времени суток. Есть у меня такой вот скрипт: function access(button) { var expert =...

Поведение оператора echo при вызове функций
Здравствуйте, заметил вот такое поведение: function foo() { echo 'hello'; } echo foo(); // output: hello По-идее,...

Непонятное поведение поведение TIM6 на STM32f4discovery
Вводные данные: SYSCLK=168Мгц; AHB Pressotir=1; APB1 Pressotir=4; TIM6_Pessotir=3; Т.о. частота тактирования на таймере=42Мгц ...

Избыточное копирование объекта при реализации оператора умножения и оператора присваивания
Есть класс работы с матрицами. Есть операция умножения матриц, описанная как оператор класса. В данном коротком примере я просто моделирую...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

Новые блоги и статьи
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru