Описание тега nothrow

1 ответ

Что делать при сбое выделения памяти new (nothrow) в C++ на linux

В контексте без исключений, я видел несколько сообщений, говорящих Thing* t = new(std::nothrow) Thing; // returns NULL on failure if (!t) { // allocation failure } например Как проверить ошибки выделения памяти с новым оператором? Как узнать возвращ…
1 ответ

Почему спецификация noexcept `operator=(T&& t)` `std: variable` не зависит от спецификации noexcept деструктора внутренних типов?

Длинное название: почему std:variant"s operator=(T&& t)спецификация noexcept не зависит от спецификации noexcept деструктора внутренних типов? Я могу видеть на Cppreference, что template <class T> variant& operator=(T&& t) …
08 окт '18 в 15:46
2 ответа

Предпочтительный способ построения струн в D

Каков предпочтительный способ построения строк относительно атрибутов функции @safe, pure а также nothrow а во время компиляции и во время выполнения функции родительских функций? Должны ли мы использовать, например, format("Variable x=%s should equ…
01 сен '13 в 20:27
2 ответа

Как провалить конструктор с новым (std::nothrow)?

Рассмотрим следующий код: #include <new> #include <malloc.h> #include <stdio.h> void * operator new(size_t size) { void *res; if (size == 1) { res = NULL; } else { res = malloc(size); } fprintf(stderr, "%s(%zu) = %p\n", __PRETTY_FU…
17 ноя '14 в 18:33
4 ответа

Размещение новых и исключений

Оператор размещения новых объявлен так: void* operator new (std::size_t size, void* ptr) noexcept; Но хотя это и не связано с каким-либо фактическим распределением, поэтому исключаются недопустимые исключения при распределении, все же возможно, что …
3 ответа

Является ли по умолчанию конструктор std::string no-throw?

Может std::string s; бросить при каких обстоятельствах? Регулируется ли это стандартом (интересует C++03, если есть различия)?
20 янв '13 в 02:41
2 ответа

C++ Распределение памяти с оператором new: Каковы методы обнаружения и обработки ошибок выделения?

В предыдущих программах я использовал следующий код для проверки ошибок выделения памяти, обычно не думая об альтернативах: int* p_int = new int[10]; if(!p_int) { // We failed, so exit return EXIT_FAILURE; } Этот метод также задокументирован здесь. …
23 авг '15 в 16:19
2 ответа

Использование необъявленного идентификатора nothrow; Вы имели в виду "бросить"? объем памяти

Я работаю над кодом cpp для переноса одного приложения с Windows на Mac. При создании приложения в XCode оно выдает ошибку, говорящую: "Use of undeclared identifier 'nothrow'; did you mean 'throw'? memory" Эти ошибки выбрасываются в заголовки станда…
15 авг '17 в 02:31
9 ответов

Когда следует использовать std::nothrow?

Каково идеальное использование std::nothrow?
17 янв '11 в 21:30
1 ответ

Linux g++ new (std::nothrow) работает

Я использую постоянное значение C++ std::nothrow в новом операторе, чтобы избежать исключения при сбое, и вместо этого вернуть ноль. Но, как я пытался, это, кажется, не работает в моей среде g++ 4.4.4 на Linux x86_64. Ниже приведены программа тестир…
25 окт '17 в 06:23
1 ответ

(std::no throw) аварийно завершает работу при сбое выделения

У меня есть собственный распределитель памяти написано что-то вроде void* Object::operator new(std::size_t size, const std::nothrow_t& nothrow_value) { void *p = Allocator->malloc(size); return p; } Поскольку стандарт гласит, что я не должен …
13 сен '13 в 18:12
3 ответа

Оператор новый с параметром nothrow по-прежнему выдает исключение

Есть такой код: #include <iostream> int main(){ for(;;){ int* ptr = new (std::nothrow) int; if(ptr == 0){ std::cout << 0 << std::endl; break; } } std::cin.get(); return 0; } Однако эта программа по-прежнему выдает исключение std::b…
26 сен '11 в 12:35
3 ответа

C++: Что должно быть возвращено, когда не хватает памяти?

Когда я кодирую как показано ниже, он вернет 'null', и исключение не произошло Char* pStr = new(std::nothrow)Char(10); Как насчет того, чтобы не использовать аргумент nothrow для оператора new? Это также возвращает "ноль"? Если так, почему рекоменду…
10 дек '12 в 04:46
1 ответ

Оператор ++() nothrow не компилируется

Почему я не могу сделать оператор ++() nothrow? Это может быть одним из немногих преимуществ использования оператора postfix ++ (перед оператором prefix ++). Например, этот код не компилируется class Number { public: Number& operator++ () // ++ …
17 май '16 в 00:20
1 ответ

Как указать nothrow спецификатор исключения для деструктора?

Я пытаюсь указать, что функция nothrow всякий раз, когда деструктор Foo не бросает. Я могу сделать это, используя черту типа std::is_nothrow_destructible<>, Как я могу сделать это напрямую? Я попробовал следующее, но он не компилируется, если …
19 фев '15 в 01:46
2 ответа

Почему std::pair не конструктивен?

Следующий код: #include <iostream> #include <iomanip> #include <string> #include <utility> using namespace std; struct Foo { std::string s; int i; }; int main() { cout << boolalpha << is_nothrow_constructible<F…
11 июн '18 в 20:59
2 ответа

Как использовать std::nothrow и std::new_handler в стандартном заголовочном файле <new>

Наткнулся на небольшой стандартный заголовочный файл &lt;new&gt;, Я, вероятно, не видел его прямого использования раньше. Вот версия g++ для тех, кому интересно. Ниже часть моего интереса: struct nothrow_t { }; extern const nothrow_t nothrow; /** If…
22 ноя '12 в 05:10
2 ответа

Как объединить std::make_shared и new(std::nothrow)

В новой версии C++ есть возможность возвращать нулевой указатель, а не выдавать исключение bad_alloc в случае неудачного размещения. Foo * pf = new(std::nothrow) Foo(1, 2, 3); (Да, я понимаю, что это только препятствует тому, чтобы новый бросал bad_…
19 мар '14 в 15:49
1 ответ

Есть ли у std::make_shared и std::make_unique версия "nothrow"?

Для нового оператора мы имеем std::nothrow версия: std::unique_ptr&lt;T&gt; p = new(std::nothrow) T(); Есть ли у нас что-то подобное для std::make_shared или же std::make_unique?
18 июл '19 в 13:20
1 ответ

new(std::nothrow) int[n] выдает исключение

#include &lt;iostream&gt; #include &lt;new&gt; int main() { int n = -1; try { int *p = new(std::nothrow) int[n]; if(!p) std::cout &lt;&lt; "new expression returned nullptr\n"; } catch(const std::bad_array_new_length&amp; e) { std::cout &lt;&lt; "new…
19 дек '19 в 20:51