为什么class类型的成员需要初始化?

Why member of class type needs initialization?

我正在阅读 C++ 中的构造函数。我遇到了这个例子:

#include <iostream>

using namespace std;

class NoDefault
{
    public:
        NoDefault(const std::string&);
};

struct A
{
    NoDefault my_mem;
};

int main()
{
    A a;
    return 0;
}

它在编译时给出了这条消息:

main.cpp:26:7: error: use of deleted function ‘A::A()’

我的直觉是default ctor被删除了,因为structA里面有一个class类型的成员。请问为什么要初始化class类型的成员?我们不能让它保持未初始化状态吗?

也许是一个非常微不足道的问题,但我很好奇这样设计背后的想法?我是 OOP 新手。

A a;执行default initializationa 获得 default-initialized,其成员 my_mem 也获得 default-initialized。对于 class 类型,这意味着将使用默认构造函数进行初始化,但 NoDefault 没有它,这会导致错误。 (built-in 类型的行为不同。在 default-initialization 中,它们可能被初始化为不确定的值。)