Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
kindertei
0 / 0 / 1
Регистрация: 04.08.2016
Сообщений: 96
Завершенные тесты: 2
1

Передача объектов функции. Два обращения к функции деструктора

27.10.2016, 22:24. Просмотров 268. Ответов 5
Метки c++ (Все метки)

В книге этот код должен 2 раза обращаться к функции деструктора, то есть результатом программы должно быть:
Создание
10
Разрушение
Разрушение.
У меня же выводится без последнего "Разрушения". С чем это может быть связано?Чисто любопытно VS 2015

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
// Конструкторы, деструкторы и передача объекта.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
 
 
class myclass {
    int val;
public:
    myclass(int i) { val = i; std::cout << "Создание\n"; }
    ~myclass() { std::cout << "Разрушение\n"; }
    int getval() { return val; }
};
 
void display(myclass ob) {
    std::cout << ob.getval() << '\n';
}
 
 
int main()
{
    setlocale(LC_ALL, "RUS");
 
    myclass a(10);
 
    display(a);
 
    system("pause");
 
    return 0;
}
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.10.2016, 22:24
Ответы с готовыми решениями:

Передача объектов в функции
Добрый день. После C изучал C#, теперь перешел к плюсам. Столкнулся с непониманием. В каких...

Классы. Программирование алгоритмов с использованием конструктора, деструктора, friend - функции инициализации set() и функции вывода результатов prin
Братаны, выручайте!:help: Общая постановка. Пользовательский класс Х должен содержать необходимые...

Классы. Программирование алгоритмов с использованием конструктора, деструктора, friend - функции инициализации set() и функции вывода результатов pri
Братаны, выручайте! Общая постановка. Пользовательский класс Х должен содержать необходимые...

Передача объектов в функции и методы
Как лучше передавать объекты в функции и методы и почему?

Передача массива объектов функции
Выбивает о каком-то недопустимом внешнем символе, подскажите что не так. Вот цикл, который...

5
IchimaruGin
79 / 79 / 44
Регистрация: 14.07.2013
Сообщений: 401
Завершенные тесты: 1
27.10.2016, 22:26 2
здесь создается только один объект поэтому один деструктор вызывается
1
Renji
2567 / 1760 / 528
Регистрация: 05.06.2014
Сообщений: 5,113
27.10.2016, 22:29 3
Цитата Сообщение от kindertei Посмотреть сообщение
У меня же выводится без последнего "Разрушения". С чем это может быть связано?Чисто любопытно VS 2015
display заинлайнилось, создания копии объекта не произошло, соответственно и второго вызова деструктора при уничтожении копии тоже не произошло.

Добавлено через 42 секунды
Цитата Сообщение от IchimaruGin Посмотреть сообщение
здесь создается только один объект поэтому один деструктор вызывается
Два - display принимает копию объекта, а не ссылку на уже существующий.
1
nd2
3102 / 2596 / 1134
Регистрация: 29.01.2016
Сообщений: 8,690
27.10.2016, 22:33 4
Цитата Сообщение от kindertei Посмотреть сообщение
У меня же выводится без последнего "Разрушения". С чем это может быть связано?Чисто любопытно VS 2015
А так?
C++
1
2
3
4
5
6
7
8
9
    setlocale(LC_ALL, "RUS");
 
    {
        myclass a(10);
 
        display(a);
    }
 
    system("pause");
0
castaway
Эксперт С++
4948 / 3054 / 456
Регистрация: 10.11.2010
Сообщений: 11,154
Записей в блоге: 10
Завершенные тесты: 1
27.10.2016, 22:42 5
Цитата Сообщение от kindertei Посмотреть сообщение
У меня же выводится без последнего "Разрушения". С чем это может быть связано?
Это связанно с тем, что второе сообщение "Разрушение" выводится после функции system("pause");. Вы его просто не успеваете заметить.
1
IchimaruGin
79 / 79 / 44
Регистрация: 14.07.2013
Сообщений: 401
Завершенные тесты: 1
27.10.2016, 22:44 6
что бы не использовать system("pause") запускай без отладки (start without debugging)
1
27.10.2016, 22:44
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.10.2016, 22:44

Передача функций в функции, замена инициализации функции ключевыми словами
Хочу сделать фишку по типу property в c++/cli int property a{ int get(){ return value; } }...

Односвязные списки (функции обращения списка)
1. Написать рекурсивную функцию обращения списка. 2. Написать итеративную функцию обращения...

Передача функции в качестве параметра функции
Дорогие форумчане! Повторяю пример из книжки. До конца не понял его! Помогите разобраться! Тема:...


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

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

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