| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Не пойму почему не выполняется копирующий кон- |
| Автор: AlexNor 5.9.2004, 17:18 | ||
В этом коде при создании обьекта А в принципе должен выполнятся копирующий конструктор, но почему-то не выполняется. Почему? Из-за оптимизации кода компилятором что-ли?
У меня выдаёт: Object A in constructor 0 Object B in copy constructor 1 Вроде в строке "A a = A ();" должно происходить создание временного обьекта которым потом при помоща копирующего конструктора должен инициализироваться a. Но этого не происходит. Где я не прав? |
| Автор: srd 5.9.2004, 17:31 | ||||
Нет, в строке "A a = A();" конструктор копирования вызываться не должен. Эта строка эквивалентна строке "A a();" (или "A a;")! При проектировании языка Си++ были приложены усилия для того, чтобы определяемые пользователем типы вели себя, как встроенные. Было бы глупо ожидать, что на строке
будет создаваться временная переменная, а потом её значение записываться в n. Кстати, попробуй написать
|
| Автор: AlexNor 5.9.2004, 18:11 |
| srd ну для int да, я согласен - но ведь это простой тип. А с классом: с одной стороны свиду "A a;" и "A a = A()" эквивалентны, но с другой стороны я всё таки пишу не "A a" а именно "A a = A()". "При проектировании языка Си++ были приложены усилия для того, чтобы определяемые пользователем типы вели себя, как встроенные." -> тогда ясно почему именно так реализовали. а почему происходит глюк с n2? |
| Автор: srd 5.9.2004, 18:21 | ||
| C n2 нет глюка. Конструктор по умолчанию существует для всех простых типов. Я же говорил, что "были приложены усилия, для того, чтобы определяемые пользователем типы вели себя, как встроенные" Добавлено @ 18:24 Это позволяет писать например так:
Здесь параметром шаблона может быть класс с дефолтным конструктором, а может быть простой тип. |
| Автор: srd 5.9.2004, 18:36 | ||
Обрати внимание на вывод этой программы. При создании переменной класса дефолтный конструктор вызывается в любом случае и при первой форме записи и при второй. А для простой целой переменной в первом случае конструктор не вызывается, а во втором - вызывается, и он инициализирует значение переменной. Забавно, да? |