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

Обработка исключений для new - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ рядки http://www.cyberforum.ru/cpp-beginners/thread114457.html
помогите зделать прогу которая сделает выравнивание по правому краю введенного текста для чего в каждой строке использовать функцию WIDE(str.k) Добавлено через 2 часа 33 минуты помогите пожалуйста.
C++ Сортировка C++ Доброго времени суток. Помогите пожалуйста отсортировать массив структур любыми 2-мя способами (сорт. пузырьком, сорт. вставками, сорт. выбора) одним способом сортировка по цене, вторым по номеру. #include <iostream.h> #include <conio.h> struct bd { char name ; float price; float number; } st ; http://www.cyberforum.ru/cpp-beginners/thread114431.html
C++ Производительность
Подскажите, где или что почитать о том, как писать БЫСТРЫЕ программы? (про разработку высоконагруженных программ). Копаюсь в интернете - но нахожу крупицы... И всё бессистемно. Спасибо.
C++ Конструкторы классов
Схематично: class A {public: A() {}//конструктор А . . . //методы класса А } class B: public A {public: B() {}//конструктор B
C++ Массив http://www.cyberforum.ru/cpp-beginners/thread114405.html
Помогите переделать в функцию плз а то не получается( #include <iostream> #include <conio.h> #include <ctime> using namespace std; int main() {
C++ Переполнение стека Хочу полюбопытствовать. Вычитал недавно, что на стек выделяется ограниченная область памяти, и в языке Си это 4 Кб. Вопрос: Если мне нужно будет работать со стеком, и определять его непосредственно через линейный список, то, как мне задать ту грань, за которую бы не позволяла программа пользователю переходить? И еще один: Когда идёт процесс очистки стека, следует освобождать каждый узел, или... подробнее

Показать сообщение отдельно
Genius Ignat
1235 / 773 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
10.04.2010, 12:27     Обработка исключений для new
Раскрою одну страшную тайную которая не является тайной, недавно узнал что
в конструкторе можно делать return; а ещё есть механизм обработки ошибки в конструкторе
без исключения, это я узнал из COM вероятно стандартом исключения там не разрешены.


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream.h>
#include <objbase.h>
 
class MyClass {
public:
MyClass(int a, int b , HRESULT *hr);
};
 
MyClass::MyClass(int a, int b , HRESULT *hr){
    
if(b==0){
    *hr=E_FAIL;
         return;
    }
 
int c = a/b;
*hr = S_OK;
}
 
 
int main(){
 
HRESULT hr ;
MyClass obj1(2,0,&hr);
 
if(SUCCEEDED(hr))cout<<"Ok\n";
if(FAILED(hr)) cout<<"Division on 0\n";
 
MyClass obj2(2,2,&hr);
 
if(SUCCEEDED(hr))cout<<"Ok\n";
if(FAILED(hr)) cout<<"Division on 0\n";
 
 
return 0;
}
Замысел прост, можно было и без COM, смысл такой передаём выходной параметр,
и проверяем его значение на удачность.
Раньше я не задумывался: что возвращаемое значение еще можно получать через параметры.
Может кому интересен этот способ.

Добавлено через 11 минут
Как быть с конструктором копирования и операцией присваивания это надо подумать.

Добавлено через 3 минуты
Одно есть преимущество при такой передаче юзер обязан передать hr это и радует.
А от возвращаемого значения можно отказаться допустим при вызове простой функции.

Добавлено через 6 минут
А кто хочет обрабатывать(bad_alloc) new в конструкторе
предусмотрено такое для hr значение: E_OUTOFMEMORY;
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru