I am starting to work with nested classes and I am not sure I understand them yet. I have the following code:
#include <iostream>
#include <string>
class enclose
{
private:
int x;
public:
enclose(void);
~enclose(void);
class nested1
{
public:
nested1(void);
~nested1(void);
void printnumber(enclose p);
};
nested1 nested;
};
enclose::enclose(void)
{
std::cout << "Enclosed class constructor called" << std::endl;
this->x = 10;
}
enclose::~enclose(void)
{
std::cout << "Enclosed class destructor called" << std::endl;
}
enclose::nested1::nested1(void)
{
std::cout << "Nested class constructor called" << std::endl;
}
enclose::nested1::~nested1(void)
{
std::cout << "nested class destructor called" << std::endl;
}
void enclose::nested1::printnumber(enclose p)
{
std::cout << "the number is " << p.x << std::endl;
}
int main()
{
enclose example;
example.nested.printnumber(example);
}
The output of my code is the following:
Nested class constructor called
Enclosed class constructor called
the number is 10
Enclosed class destructor called
nested class destructor called
Enclosed class destructor called
nested class destructor called
How can destructors be called twice if constructors are only called once? I thought you couldn't destruct something that hasn't been constructed previously.