Привет, ребята, поэтому у меня проблемы с моим деструктором в моей программе на C++. Когда я запускаю программу и беру вход пользователя, она неожиданно вызывает деструктор перед cout может даже печатать внутри утверждения. Предположим, что пользовательский ввод будет одним, потому что я разработал эту часть кода только для ввода ввода 1. Я думал, что деструктор вызван, когда вы покидаете область видимости, поэтому я думал, что деструктор должен быть вызван по крайней мере после того, как cout в оператор if, который я буду комментировать ниже, чтобы вам было легче читать. Если кто-то может объяснить мою ошибку и исправить ее, это было бы здорово! В моей headerfile у меня естьПочему мой деструктор называется и как я могу его исправить?
#include <iostream>
#include <string>
#include <stdlib.h>
#include <time.h>
using namespace std;
class creature{
public:
creature();//default constructor
creature(int a);
~creature();//desconstructor
string getName();//accessor for the name
static int getNumObjects();
private:
string name;
int happy_level;
static int count;
};
В моем файле реализации у меня есть
#include "creature.h"
int creature::count=0;//initialize static member variable
creature::creature(){//default constructor
name="bob";
++numberobject;
cout<<"The default constructor is being called"<<endl;
}
creature::creature(int a)
{
if(a==1)
{
name="billybob";
}
else if(a==2)
{
name="bobbilly";
}
else if(a==3)
{
name="bobbertyo";
happy_level=1;
}
}
creature::~creature()
{
cout<<"The destructor is now being called"<<endl;
cout<<creature::getName()<<" is destroyed."<<endl;
--count;
cout<<"Now you have a total number of "<<creature::getNumObjects()<<" creature"<<endl;
}
и в моем главном классе у меня есть
#include "creature.h"
int main()
{
creature foo;//this is where the default constructor gets called which is good
int choice;
cout<<"enter 1 2 or 3 to choose ur monster"<<endl;
cin>>choice;
foo=creature(choice);
if(choice==1)
{
cout<<"hi"<<endl;//the destructor gets called before hi is printed out and I don't know why thats happening
}
}
это называется «деструктор». –
В 'foo = существо (выбор);' вы создаете анонимный экземпляр ('creature (choice)'), вызываете 'creature & operator = (const creature &)' на 'foo', а затем уничтожаете анонимный экземпляр. Кроме того, это «деструктор», BTW. –
Ваша переменная 'count' не отражает то, что действительно происходит. Вы не смогли добавить конструктор копирования и оператор присваивания для подсчета этих экземпляров. Вместо этого вы уменьшаете количество экземпляров объектов, которые вы даже не отслеживали. – PaulMcKenzie