Падение при вызове оператора.

Тема в разделе "LANGS.C", создана пользователем Mika0x65, 14 июн 2007.

  1. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    В общем, проблема, судя повсему нашла решение -- при создании временного объекта в стеке не вызывается его конструктор. Почему так происходит вопрос открытый. Лечится довольно легко -- нельзя закладываться на то, что конструктор вызывается для абсолютно всех объектов.
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Mika0x65
    Чего? Как такое возможно?
     
  3. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Booster
    Да мне самому интересно :). Но факт остается фактом. При чем, конструктор без параметров существует, но вызываться почему-то отказывается.
     
  4. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Mika0x65

    Бугаго, ну ты оджэг))))) Я же тебе все уже написал)) Ты не инициализируешь переменные в конструкторе копирования))

    Покажи строчку где у тебя не вызывается конструктор копирования))
     
  5. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    _DEN_
    Конструктор копирования вызывается. Я считал, что конструктор копирования должен вызываться после обычного конструктора, инициализирующего значения. Тогда все верно.
     
  6. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Mika0x65

    Ты строку покажи.
     
  7. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Код (Text):
    1. ARRAY::ARRAY(const ARRAY &array)
    2. {
    3.         //this здесь еще не инициализирован.
    4.     size = array.size;
    5.     data = new int [size];
    6.  
    7.     for (unsigned int i =0; i < size; i++)
    8.         data[i] = array.data[i];
    9. }
     
  8. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Mika0x65

    Читайте MO часть, а не пишите чушь.
     
  9. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Booster
    Месье начал программировать на С++ еще до рождения? ;)
     
  10. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Mika0x65
    Сорри, если грубоват, но по чесноку это совсем азы. Форм конструктора может быть множество, но вызывается всегда только один. Кстати сложные мемберы (классы, структуры) лучше инициализировать в списке инициализации конструктора, а то иначе вначале вызывается дефолтовый конструктор (или не вызывается, если его нету), а потом вызывается оператор присваивания, вообщем не оптимал.
     
  11. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Booster
    Да ничего, я просто только начал. Когда-то читал об этом, но ни до чего серьезного не дошел. Понятно, что конструктор должен вызваться один. Переклинило, почему в копирующем конструкторе значения еще не инициализированны. Сейчас понятно, что их инициализация на мне и лежит.
     
  12. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Mika0x65

    До рождения начал программировать на C++ я.

    В том что я скачал конструктор копирования был другой. Но это не имеет значения - я просил показать место его вызова.