我是C ++的新手,正在学习C ++的嵌套类和静态类成员,我编写以下代码:
#include <iostream>
using namespace std;
class Outter
{
public:
Outter() {
//get();
cout << "construct Outter" << endl;
}
~Outter() {
cout << "destruct Outter" << endl;
}
private:
class Inner
{
public:
Inner() {
cout << "construct Inner" << endl;
}
~Inner() {
cout << "destruct Inner" << endl;
}
};
//Inner get() {
// return i;
//}
static Inner i;
};
int main() {
Outter o;
return 0;
}
我在外部类中创建内部类和内部类的静态实例。当我运行不带get()
函数的代码时,结果输出为:
construct Outter
destruct Outter
然后我删除get()
函数的注释并在Outter()
中调用它,然后重新运行该程序,输出变为:
destruct Inner
construct Outter
destruct Outter
我对这个结果感到困惑,因为据我了解,在construct Inner
之前应该有一个destruct Inner
,在destruct Inner
之后应该是destruct Outter
。有人可以解释这里发生的事情吗?
答案 0 :(得分:0)
由于您调用Inner i;
时已经构建了get
,所以输出与您期望的不一样。
将发生以下情况:
1.在get
中,您将静态实例复制到i
,这是一个复制操作,此处没有默认构造。
3.您返回临时复制的 Inner
对象,该对象立即被破坏,因此destruct Inner
。
我想Outer
是不言而喻的。您对其进行了构造,当它超出范围时就会被破坏。