对象初始化期间的析构函数调用?

Joh*_*0te 0 c++

鉴于下面的代码,为什么我会得到关于A的析构函数是私有的错误?显然它是私有的,但我不明白为什么以这种方式初始化B的对象实例会导致调用A的析构函数.

对于任何拼写错误道歉,我正在从非联网系统重新创建内存中的代码,并且没有编译器.

class A
{
    public:
        A(int val) : x(val) {}

    private:
        int x;
        ~A() {}
};

class B
{
    public:
        B() : aInstance() {}

    private:
        A aInstance;
};

int main()
{
    B b;
}
Run Code Online (Sandbox Code Playgroud)

Jer*_*fin 5

初始化本身不涉及使用dtor,但实例B在最后被销毁main.该B包含A,所以当B被破坏,A必须销毁,以及-但A的析构函数是不可用的,所以不能生成代码来做到这一点.