|
|
 |
Ответов
|
Nov 18 2007, 13:17
|
Знающий
   
Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153

|
Я понимаю, что такой стандарт, но все ж таки как-то неудобно. Фактически получается, что любой вызов виртуальной функции в конструкторе приводит в ошибке времени выполнения. Хотя б какой-нибудь ворнинг выдавался... Цитата(dxp @ Nov 18 2007, 15:11)  Где тут лежит объект и что об этом знает компилятор? Когда вы пишите TSlon *p = new TSlon, то вначале вызывается operator new(), затем контсруктор TSlon и только затем инициализируется __vptr. Не до конца понятно, почему нельзя инициализировать __vptr до вызова конструктора - указатель на память, где будет расположен объект, уже есть.
|
|
|
|
|
Nov 18 2007, 14:58
|

Шаман
     
Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221

|
Цитата(Непомнящий Евгений @ Nov 18 2007, 15:17)  ... Когда вы пишите TSlon *p = new TSlon, то вначале вызывается operator new(), затем контсруктор TSlon и только затем инициализируется __vptr. Не до конца понятно, почему нельзя инициализировать __vptr до вызова конструктора - указатель на память, где будет расположен объект, уже есть. Ну и на что должен указывать этот указатель? На обьект, который там скоро появится? Напоминает фразу: "Вы жарьте, а рыба будет".
|
|
|
|
|
Nov 19 2007, 07:01
|
Знающий
   
Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153

|
Цитата(IgorKossak @ Nov 18 2007, 17:58)  Ну и на что должен указывать этот указатель? На обьект, который там скоро появится? Напоминает фразу: "Вы жарьте, а рыба будет". Указатель должен указывать на массив указателей на реализации виртуальных функции. После вызова operator new уже есть указатель на (неиниализированную) память. В этой точке также известна структура создаваемого объекта и его тип - т.е. известно, чему равен __vptr и где он находится. Почему нельзя его записать до вызова пользовательского конструктора, а не после?
|
|
|
|
|
Nov 19 2007, 07:23
|
Бывалый
    
Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615

|
Цитата(Непомнящий Евгений @ Nov 19 2007, 10:01)  Объект условно состоит из: - свойств (память типа ОЗУ); - реализаций (память типа Flash). Создание объекта подразумевает два варианта: 1. статический объект память свойств отводится уже на этапе компиляции (она строго резервируется); 2. динамическое создание объекта (память свойств отводится в куче и она находится, там где окажется).
|
|
|
|
Сообщений в этой теме
AlexG IAR EWAVR и виртуальные функции Nov 12 2007, 12:41 alexander55 Цитата(AlexG @ Nov 12 2007, 15:41)
Приве... Nov 12 2007, 13:00 AlexG Разобрался. Вызывать виртуальную функцию прямо в к... Nov 13 2007, 04:10 Непомнящий Евгений Цитата(AlexG @ Nov 13 2007, 07:10) Разобр... Nov 15 2007, 06:38  dxp Цитата(Непомнящий Евгений @ Nov 15 2007, 12... Nov 15 2007, 07:06 Непомнящий Евгений А почему нельзя инициализировать его до выполнения... Nov 18 2007, 08:54 dxp Цитата(Непомнящий Евгений @ Nov 18 2007, 14... Nov 18 2007, 12:11 Николай Z Цитата(Непомнящий Евгений @ Nov 18 2007, 11... Nov 18 2007, 12:46   dxp Цитата(Непомнящий Евгений @ Nov 19 2007, 13... Nov 19 2007, 10:24    Непомнящий Евгений Цитата(dxp @ Nov 19 2007, 13:24) Какая та... Nov 19 2007, 10:38     dxp Цитата(Непомнящий Евгений @ Nov 19 2007, 16... Nov 19 2007, 11:52
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|