Почему член типа класса нуждается в инициализации?

Я читаю о конструкторах в С++. Я наткнулся на этот пример:

      #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()’

У меня возникает интуитивное ощущение, что ctor по умолчанию удален, потому что внутри структуры есть член типа класса. A. Я хочу спросить, зачем нужна инициализация члена типа класса? Можем ли мы не оставить его неинициализированным?

Может быть, очень тривиальный вопрос, но мне любопытно, что стоит за его проектированием? Я новичок в ООП.

1 ответ

A a;выполняет инициализацию по умолчанию ; aполучает инициализацию по умолчанию, а его член my_memтоже инициализируется по умолчанию. Для типа класса это означает, что конструктор по умолчанию будет использоваться для инициализации, но NoDefaultего нет, что приводит к ошибке. (Поведение встроенных типов отличается. При инициализации по умолчанию они могут быть инициализированы неопределенными значениями.)

Другие вопросы по тегам