Исключение копирования (или исключение копирования) — это метод оптимизации компилятора, который позволяет избежать ненужного копирования объектов. Теперь дни, почти каждый компилятор использует его. Позвольте нам понять это с помощью примера.
|
Вывод вышеуказанной программы:
Constructor called
Почему конструктор копирования не вызывается?
Согласно теории, когда объект «ob» создается, конструктор с одним аргументом используется для преобразования «copy me» во временный объект, и этот временный объект копируется в объект «ob». Итак, утверждение
B ob = "copy me";
должен быть разбит компилятором как
B ob = B("copy me");
Однако большинство компиляторов C ++ избегают таких накладных расходов, создавая временный объект и затем копируя его.
The modern compilers break down the statement B ob = "copy me"; //copy initialization as B ob("copy me"); //direct initialization and thus eliding call to copy constructor.
Однако, если мы все еще хотим убедиться, что компилятор не исключает вызов конструктора копирования [отключить разрешение копирования], мы можем скомпилировать программу, используя опцию «-fno-elide-constructors» с g ++, и увидеть вывод следующим образом :
aashish@aashish-ThinkPad-SL400:~$ g++ copy_elision.cpp -fno-elide-constructors aashish@aashish-ThinkPad-SL400:~$ ./a.out Constructor called Copy constructor called
Если используется опция -fno-elide-constructors, сначала вызывается конструктор по умолчанию для создания временного объекта, а затем вызывается конструктор копирования для копирования временного объекта в ob.
Ссылка:
http://en.wikipedia.org/wiki/Copy_elision
Эта статья составлена Aashish Barnwal и рецензирована командой GeeksforGeeks. Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
Рекомендуемые посты:
- Различные методы для копирования в C ++ STL | std :: copy (), copy_n (), copy_if (), copy_backwards ()
- Копировать конструктор в C ++
- Когда вызывается конструктор копирования?
- Копирование и замена идиома в C ++
- Способы скопировать вектор в C ++
- Когда мы должны написать наш собственный конструктор копирования?
- Предотвращение копирования объекта в C ++ (3 разных способа)
- Продвинутый C ++ | Конструктор виртуальных копий
- Почему аргумент конструктора копирования должен быть константным в C ++?
- Конструктор копирования против оператора присваивания в C ++
- Когда компилятор создает конструкторы по умолчанию и копирует конструкторы в C ++?
- Программа на C для копирования строки без использования функции strcpy ()
- Программа для копирования содержимого одного массива в другой в обратном порядке
- C программа для копирования содержимого одного файла в другой файл
0.00 (0%) 0 votes