Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
Заблокирован

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

19.09.2014, 11:04. Показов 3759. Ответов 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,038
Записей в блоге: 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,038
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Сезонность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru