【发布时间】:2021-11-06 21:32:54
【问题描述】:
我开始使用嵌套类,但我不确定我是否理解它们。我有以下代码:
#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);
}
我的代码输出如下:
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
如果构造函数只调用一次,如何调用两次析构函数?我以为你不能破坏以前没有建造的东西。
【问题讨论】:
-
printnumber按值接受它的参数,在调用时会生成一个副本。该对象在函数结束时被销毁。 -
你不会打印所有可能的方式来构造你的类,尤其是复制构造函数。
-
如果构造函数只被调用一次,怎么能调用两次析构函数?他们不能,尝试这样做是未定义的行为。提供的代码没有这样做。
标签: c++ nested destructor inner-classes