首页 > 解决方案 > C++:外部类中静态内部类实例的构造和销毁

问题描述

我是 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 Innerbeforedestruct Innerdestruct Innershould after destruct Outter。有人可以解释这里发生了什么吗?

标签: c++

解决方案


输出与您预期的不一样,因为Inner i;在您调用get.

发生的情况如下: 1. 在get你得到一个静态实例 to i,这是一个复制操作,这里没有默认构造。3. 您返回一个临时复制 Inner的对象,该对象立即被破坏,因此destruct Inner.

Outer我想,是不言而喻的。你构建它,当它超出范围时它被破坏。


推荐阅读