2 / 2 / 5
Регистрация: 18.11.2013
Сообщений: 118
1

Почему удаляется объект?

30.11.2014, 12:15. Показов 401. Ответов 2
Метки нет (Все метки)

Помогите, пожалуйста, понять почему удаляется объект и как это исправить?
Идея следующая:
В Source.cpp я создаю два объекта, вызывая метод первого объекта (NewAirport), который вызывает метод второго объекта и получает его в себя как аргумент. Но сообщение "Полоса свободна" не выводится и при пошаговой отладке в метод второго объекта комп. даже не входит, вместо этого консоль выводит:
Аэропорт создан
Взлетная полоса создана
Взлетная полоса удалена
___
Почему она удаляется и почему не входит в метод NewRunway'я? Спасибо.
Airport.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Airport::Airport()
{
    cout << "Аэропорт создан" << endl;
}
Airport::~Airport()
{
    cout << "Аэропорт удален" << endl;
}
 
void Airport::StartModelling(Runway NewRunway)
{
    if (NewRunway.FreeOrBusy(State) == true)
        cout << "Полоса свободна" << endl;
}
Runway.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
Runway::Runway()
{
    cout << "Взлетная полоса создана" << endl;
}
bool Runway::FreeOrBusy(int State)
{
    if (State == 1)
        return true;
}
Runway::~Runway()
{
    cout << "Взлетная полоса удалена" << endl;
}
Source.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main()
{
    setlocale(LC_ALL, "Russian");
 
    Airport NewAirport;
    Runway NewRunway;
 
    
    NewAirport.StartModelling(NewRunway);
    Sleep(2000);
 
 
    system("pause");
    return 0;
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.11.2014, 12:15
Ответы с готовыми решениями:

Объект удаляется до возвращения его из функции
Есть следующий код перегрузки операции &quot;+&quot; для сложения матриц: Matrix operator+(const Matrix...

удаляется ли объект или происходит утечка памяти?
Добрый день, подскажите, при таком коде, удаляется ли объект или происходит утечка памяти? ...

Удаляется объект когда не требуется и всё равно продолжает существовать
Всем привет. Честно говоря я не знаю как ещё более правильно описать проблему в заголовке. В общем...

Созданный объект Array<char> удаляется, как только метод convert завершается
Есть простенькая оболочка над массивом Array&lt;T&gt;: template&lt;typename T&gt; class Array { private:...

2
15110 / 8110 / 1958
Регистрация: 30.01.2014
Сообщений: 13,784
30.11.2014, 13:10 2
d3vn, удаляется потому, что ты его копируешь. Т.е. удаляется копия внутри этого метода:
C++
1
StartModelling(Runway NewRunway) //<--- здесь передача по значению, значит будет копия
В С++ принято такие вещи передавать по ссылке. Во-первых тебе действительно нужно работать здесь с оригинальным объектом из main, а не с его копией. Во-вторых, передача по ссылке избавит от потенциальных накладных расходов при передаче больших объектов.
C++
1
StartModelling(Runway const & NewRunway)
или, если нужно изменять состояние NewRunway
C++
1
StartModelling(Runway & NewRunway)
Добавлено через 2 минуты
Цитата Сообщение от d3vn Посмотреть сообщение
почему не входит в метод NewRunway'я?
А вот это уже к вопросу о том, как реализовано копирование Runway. Почему-то у тебя вышло так, что заданный state не равен 1 в копии и, если он был равен 1 в оригинальном объекте из main, то нужно смотреть как ты сделал конструктор копирования в классе Runway.

Добавлено через 8 минут
Цитата Сообщение от DrOffset Посмотреть сообщение
как ты сделал конструктор копирования в классе Runway.
Хотя, я вижу что ты его не делал. И я так же не вижу где бы state задавался равным 1. Не удивительно, что он не проходит проверку и не выводит "Полоса свободна".

PS. Никогда не называй методы, которые возвращают bool с использованием слова "или" (Or). Это вне всякой логики. Может быть метод Free, который вернет true, если полоса свободна и false, если нет. Или может быть метод Busy, который вернет false, если полоса свободна и true, если нет. А вот метода FreeOrBusy, который возвращает bool, быть не должно. Что здесь считать true, а что false не понятно, ведь "или" подразумевает равнозначность обоих условий.
1
2 / 2 / 5
Регистрация: 18.11.2013
Сообщений: 118
30.11.2014, 13:25  [ТС] 3
DrOffset, большое спасибо, все понял)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.11.2014, 13:25

Почему оператор присваивания удаляется?
Возьмём код #include &lt;vector&gt; class C { const std::vector&lt;int&gt; v; }; int main() {

Unique: почему не удаляется Point(1,2)?
Добрый вечер, почему не удаляется Point(1,2) ? %-) #include &lt;algorithm&gt; #include...

почему здесь в коде из книги при значении равном NULL не удаляется указатель на динамическую память?
#include &lt;iostream&gt; using namespace std; class MyString { private: public: char* Buffer;

Почему допустимо создавать объект по другому объекту, но нельзя присваивать уже созданный объект, другому созданному объекту?
Это можно : Array a(10); a.set(0,5); Array b(a); А это нельзя : Array a(10); Array b(20);...


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

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

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