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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
pi_X_el
Заблокирован
#1

Конструктор вызывается один раз, а деструктор два раза - C++

07.03.2013, 19:21. Просмотров 547. Ответов 4
Метки нет (Все метки)

Программа для обработки исключений.
Вообщем если ввести два числа и второе будет 0, то конструктор будет вызван 1 раз, а деструктор 2 раза.
Мне вот это непонятно, как такое вообще может быть?

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
38
39
40
41
42
43
44
45
46
47
#include <iostream>
 
class CDivideByZeroError
{
public:
    CDivideByZeroError() : m_message("Деление на нуль.")     { std::cout << "Конструктор." << std::endl; }
    ~CDivideByZeroError()           { std::cout << "Деструктор" << std::endl; }
    void PrintMessage() const       { std::cout << m_message; }
private:
    const char *m_message;
};
 
double Quotient(int a, int b)
{
    if (b==0)
        throw CDivideByZeroError();
 
    return double(a) / b;
}
 
 
int main()
{
    system("chcp 1251");
 
    int number1, number2;
 
    std::cout << "Введите два целых числа для рассчета их частного: ";
    std::cin >> number1 >> number2;
 
    try                                     // этот блок может сгенерировать исключение
    {
        double result = Quotient(number1, number2);
 
        std::cout << "Частное равно " << result << std::endl;
    }
    catch (CDivideByZeroError error)        // обработчик исключения
    {
        std::cout << "Ошибка: ";  //error.PrintMessage();
 
        std::cout << std::endl;
        system("pause");
        //return 1;
    }
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.03.2013, 19:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Конструктор вызывается один раз, а деструктор два раза (C++):

При создании класса конструктор вызывается 2 раза, затем вызывается деструктор о_О - C++
Вот такой кодclass A { public: A(){} virtual ~A(){} }; class C { public:

Два раза вызывается деструктор - C++
Создал класс, в процессе выполнения программы вызвал деструктор, но когда программа завершается, деструктор вызывается повторно и вылетает...

Почему деструктор вызывается два раза - C++
Всем привет. Есть код, для примера #include &lt;vector&gt; using namespace std; struct AA { int n; AA() :n(0) { cout &lt;&lt;...

Конструктор вызывается 2 раза - C++
Помогите пожалуйста найти ошибку. Конструктор вызывается 2 раза. #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;fstream&gt; using...

Сколько раз вызывается конструктор копирования - C++
Почему n не увеличивается? Point(const Point&amp; src){ n++; set(src.x+1, src.y+1); cout &lt;&lt; &quot;Konstruction copyrovanija...

Добавить в класс хотя бы один конструктор и деструктор - C++
Вот сама программа, заранее спасибо за помощь! #include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; using namespace...

4
villu
203 / 204 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
07.03.2013, 19:26 #2
На самом деле их вызывается 2, просто второй (конструктор копирования) писал не ты.

Добавь вот что рядом с конструктором

C++
1
2
3
4
5
6
    CDivideByZeroError( const CDivideByZeroError &other )
        : m_message(other.m_message)
    {
        std::cout << "Конструктор." << std::endl;
 
    }
попробуй еще раз.
1
Desu_Is_A_Lie
62 / 62 / 3
Регистрация: 26.02.2012
Сообщений: 114
07.03.2013, 19:35 #3
^ this

Поэтому рекомендуется брать ссылки:
C++
1
catch (CDivideByZeroError &error)
1
pi_X_el
Заблокирован
07.03.2013, 19:36  [ТС] #4
Цитата Сообщение от villu Посмотреть сообщение
просто второй (конструктор копирования) писал не ты
все понятно. спасибо
проверил. сначала вызывается обычный конструктор а уже потом конструктор копирования
0
villu
203 / 204 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
07.03.2013, 19:51 #5
Цитата Сообщение от Desu_Is_A_Lie Посмотреть сообщение
Поэтому рекомендуется брать ссылки:
именно! Причем константные
C++
1
catch (const CDivideByZeroError &error)
1
07.03.2013, 19:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.03.2013, 19:51
Привет! Вот еще темы с ответами:

this(Всегда ли вызывается конструктор при не явной передачи объекта в конструктор) - C++
class Test { int i; public: void test(int i) { this -&gt; i = i; } }; Конструктор Test::Test всегда вызывается...

Конструктор инициализации, конструктор копирования, деструктор - C++
Я сделал почти задание по перегрузке операторов. Осталось одно, тоесть три: конструктор инициализации, конструктор копирования, деструктор....

Не вызывается деструктор - C++
_Здравствуйте. Я новичок в программировании, сейчас изучаю самостоятельно С++ по книге Джесса Либерти. При разборе одного из примеров...

Деструктор не вызывается - C++
В одном классе я создаю объект, и если проверку не проходит, я его возвращаю в другой метод, дабы у меня там начало всех начал,Главное...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru