2012-04-23 2 views
0

В C++ или Objective-C термин «конструктор» точно такой же, как «инициализатор»?Является ли конструктор таким же, как инициализатор?

Причина в том, что всякий раз, когда я вижу термин «конструктор», он кажется несколько неопределенным, поскольку он также чувствует, что конструктор отвечает за настройку объекта в пространстве памяти, в то время как на самом деле конструкторы просто «инициализируют» ». Таким образом, термин «конструктор» может сбивать с толку, потому что он чувствует, что он сочетает alloc и init, в то время как термин инициализатор очень ясен, что он просто устанавливает значения.

Является ли вышеуказанное утверждение в целом правильным?

ответ

0

Нет, они не то же самое.

Инициализатор является частью грамматики C++, а не функцией. Например:

std::string s = "abcd"; 

Инициализатором является = "abcd".

Когда инициализатор присутствует в определении переменной, он предоставляет аргументы, которые будут переданы конструктору.

Подробнее об этом можно узнать в разделе 8.5 стандарта.

0

Конструктор гарантированно работает во время распределения и используется для инициализации объекта в определенном состоянии. В C++ мы называем это RAII. Инициализатор, как вы сказали, просто «устанавливает значения» или «инициализирует объект» и не требует выполнения во время распределения.

+0

поэтому, когда мы говорим, что мы пишем конструктор класса C++, мы просто записывают «часть 2» работы конструктора (инициализация)? (часть 1 была автоматически сделана для вас) –

+0

Если это поможет вам подумать об этом, то да. Когда вы создаете объект класса foo или struct bar (структуры на самом деле являются классами на C++), конструктор автоматически вызывается. –

0

Конструктор берет некоторое необработанное хранилище и создает там объект.

Инициализатор - это значение, используемое для инициализации некоторой переменной.

Хотя вы, вероятно, имеете точку зрения, что конструктор мог бы вместо этого был вызван инициализатором, я сомневаюсь, что это действительно рассматривалось как для C++, так и для Objective-C. «Инициализатор» уже имел принятое в настоящее время значение в C раньше, чем либо C++, либо Objective C. Поскольку термин уже был хорошо известен в C, я не могу представить, чтобы кто-то пытался его переопределить, чтобы означать что-то совершенно другое в языке, основанном на C.