2013-02-12 3 views
3

Я читаю главу 13 «Мышление в C++». Из книги следует следующее.новый оператор в C++

MyType * fp = new MyType (1, 2);

во время выполнения, что эквивалентна таНоса (SizeOf (MyType)), называется, и конструктор для MyType является вызывается с результирующим адресом в качестве этого указателя, используя (1, 2) в качестве аргумента список. К тому времени, когда указатель назначен fp.

Я смущен смелым предложением. Что это значит?

ответ

5

Это очень расплывчатое объяснение, но в основном это говорит о том, что результат - это место памяти, так же как и возврат malloc, и в этом месте памяти создается объект (- указатель на текущий объект) с использованием конструктора с этим списком аргументов.

+1

акцент на _very loose explain_, см. [This] (http://stackoverflow.com/questions/7194127/how-should-i-write-iso-c-standard-conformant-custom-new-and- delete-operator /) для того, сколько 'operator new' нужно делать за пределами' malloc' – David

+0

Еще один вопрос, когда и как инициализируется этот указатель? – Fihop

+0

@FihopZz, когда объект создан - до того, как тело конструктора вступит и до инициализации члена. –

4

Когда оператор new динамически распределяет память, он возвращает указатель на эту память (аналогично тому, как malloc() работает на C).

В C++ каждый нестатический метод имеет доступ к текущему объекту, на который он вызван (иначе программисты на С ++ по всему миру будут иметь серьезные проблемы). Это «неявный аргумент» методов, в конструкторах, а также доступ к нему через ключевое слово this.

Что означает предложение, что после создания объекта оператор вызывается конструктором на только что выделенную память. Потому что это единственное, что имеет смысл. :)

+0

@PeteBecker Пусть это будет ... – 2013-02-12 21:58:38

+0

Еще один вопрос, когда и как инициализируется этот указатель? – Fihop

+0

@FihopZz Здесь и назначая его адресу выделенной области памяти. – 2013-02-12 22:20:53

Смежные вопросы