В общем, проблема, судя повсему нашла решение -- при создании временного объекта в стеке не вызывается его конструктор. Почему так происходит вопрос открытый. Лечится довольно легко -- нельзя закладываться на то, что конструктор вызывается для абсолютно всех объектов.
Booster Да мне самому интересно . Но факт остается фактом. При чем, конструктор без параметров существует, но вызываться почему-то отказывается.
Mika0x65 Бугаго, ну ты оджэг))))) Я же тебе все уже написал)) Ты не инициализируешь переменные в конструкторе копирования)) Покажи строчку где у тебя не вызывается конструктор копирования))
_DEN_ Конструктор копирования вызывается. Я считал, что конструктор копирования должен вызываться после обычного конструктора, инициализирующего значения. Тогда все верно.
Код (Text): ARRAY::ARRAY(const ARRAY &array) { //this здесь еще не инициализирован. size = array.size; data = new int [size]; for (unsigned int i =0; i < size; i++) data[i] = array.data[i]; }
Mika0x65 Сорри, если грубоват, но по чесноку это совсем азы. Форм конструктора может быть множество, но вызывается всегда только один. Кстати сложные мемберы (классы, структуры) лучше инициализировать в списке инициализации конструктора, а то иначе вначале вызывается дефолтовый конструктор (или не вызывается, если его нету), а потом вызывается оператор присваивания, вообщем не оптимал.
Booster Да ничего, я просто только начал. Когда-то читал об этом, но ни до чего серьезного не дошел. Понятно, что конструктор должен вызваться один. Переклинило, почему в копирующем конструкторе значения еще не инициализированны. Сейчас понятно, что их инициализация на мне и лежит.
Mika0x65 До рождения начал программировать на C++ я. В том что я скачал конструктор копирования был другой. Но это не имеет значения - я просил показать место его вызова.