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

Стратегия "получение ресурса есть инициализация" - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Непонятки с wchar_t http://www.cyberforum.ru/cpp-beginners/thread837244.html
Прошу помощи: что-то не так с wchar_t. Не копирует имена файлов. Содержание program_config.txt config.cfg C:\\Projects\\abx.txt static wchar_t* charToWChar(const char* text)
C++ Ошибка ms vs c++ rl Здравствуйте! Я хотел запустить прогу мою на другом компе и мне выскочила такая ошибка. This application has requested the Runtime to terminate it in an unusual way. Библиотеки VS c++ пробовал переустанавливать. Надеюсь на вашу помощь http://www.cyberforum.ru/cpp-beginners/thread837234.html
Написать функцию, которая переворачивает строку C++
Написать функцию, которая переворачивает строку. Заголовок функции: void reverseStr (char *s); Написать программу, которая принимает от пользователя набор строк (массив строк), переворачивает все строки, выводит все преобразованные строки на экран.( В программе использовать написанную функцию)! Помогите пожалуйста!
C++ Игровая программа ипподром"
Добрый день, помогите пожалуйста: Необходимо создать игру "Ипподром". Я сделал в консоле что мог, не могу заставить своих "сосисочек" бегать вместе, но с разной скоростью. Получается что они бегут либо в месте, либо сперва бежит одна, а потом вторая.. помогите реализовать совместный бег "сосисок", но с разной скоростью! // ippodrom.cpp: определяет точку входа для консольного приложения. // ...
C++ Работа с указателями http://www.cyberforum.ru/cpp-beginners/thread837193.html
Помогите пожалуйста объяснить, не понимаю почему число присваемое через указатель *А в кавычках, и равны ли *А и просто А??? char *A = "123456789"; unsigned B = 1; char *X = A + B; char *Y = A - (-B); Не используя, компилятор дать ответ равны или нет будут значения X и Y. Объяснить свой ответ.
C++ ошибка в задаче на палиндром Ребят помогите пожалуйста. Задачка найти палиндром в массиве. Писал-писал и в итоге в ф-ии последнее условие if (arr_t1==arr_t2) постоянно выводит ложь, не понимаю, почему оно мне врет((( //Дан целочисленный массив от 0..N и //необходимо найти самый длинный палиндром в массиве #include <iostream> #include <conio.h> const int n = 10; подробнее

Показать сообщение отдельно
DrOffset
7089 / 4230 / 950
Регистрация: 30.01.2014
Сообщений: 7,006
28.06.2014, 19:29
Цитата Сообщение от TheChosenOne Посмотреть сообщение
Или имеется ввиду та область видимости внутри объекта,пока существует объект ?
Да, я говорил о времени жизни объекта и о его влиянии на подобъекты. Перевод scope как "область видимости" не совсем полно отражает суть и поэтому я его оставил без перевода в предыдущем посте.
А вообще сlass scope в стандарте - более широкое понятие (см. 3.3.7).

Цитата Сообщение от TheChosenOne Посмотреть сообщение
После генерации исключения,поток управления возвращается в конструктор класса и вот тут происходят чудеса:вызываются деструкторы
Известно, что деструкторы вызываются в процессе раскрутки стека:
Вот например такой код:
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
37
#include <cstdio>
#include <stdexcept>
 
struct A
{
    A()  { puts(__PRETTY_FUNCTION__); }
    ~A()  { puts(__PRETTY_FUNCTION__); }
};
 
struct B
{
    B()   { puts(__PRETTY_FUNCTION__); }
    ~B()  { puts(__PRETTY_FUNCTION__); }
};
 
class C
{
public:
    C() : a(), b()
    {
        puts(__PRETTY_FUNCTION__);
        throw std::logic_error("");
    }
private:
    A a;
    B b;
};
 
void foo()
{
    C c;
}
 
int main(int argc, char *argv[])
{
    foo();
}
Т.е. исключение мы не ловим. И такой код печатает на gcc 4.7.2:
A::A()
B::B()
C::C()
terminate called after throwing an instance of 'std::logic_error'
Ни один из деструкторов не вызвался. Если добавить try - catch вокруг вызова foo() то получим вызов деструкторов. И вот у меня есть еще старый gcc 3.0.1 на RH7. Там ситуация иная, вывод этого же кода такой:
A::A()
B::B()
C::C()
B::~B()
A::~A()
Aborted
Вот тут как раз деструкторы вызвались в соответствии с этим: "This code gets executed somehow as part of the implementation of the exception handling mechanism whenever an exception propagates out of a constructor".
Однако, лично я не видел в стандарте каких-то конкретных указаний, что это должно происходить сразу же после выхода из конструктора. В стандарте написано только, что
As control passes from a throw-expression to a handler, destructors are invoked for all automatic objects constructed since the try block was entered
.
А что такое handler в стандарте описано четко (15/1):
handler:
catch ( exception-declaration ) compound-statement
Т.е. скорее верно поведение 4.7.2 и процесс на SOF описан все-таки не совсем корректно.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru