Почему член типа класса нуждается в инициализации?
Я читаю о конструкторах в С++. Я наткнулся на этот пример:
#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
его нет, что приводит к ошибке. (Поведение встроенных типов отличается. При инициализации по умолчанию они могут быть инициализированы неопределенными значениями.)