2016-06-29 9 views
-1

Я создал класс и инициализировал массив объектов через конструктор, почему или почему здесь не вызван конструктор копирования? Это копия элиции?[Prob] Почему конструктор копирования не вызван

#include<iostream> 
#include<stdio.h> 

class ABC 
{ 
    int x, y; 
public: 
    ABC() 
    { 
     x = 0; 
     y = 0; 
    } 
    ABC(int a,int b) 
    { 
     x = a; 
     y = b; 
    } 
    ABC(const ABC &obj) 
    { 
     std::cout<<"Copy called"; 
    } 
}; 

int main() 
{ 
    ABC obj[2] = {ABC(), ABC(5,6)}; //copy elision or copy constructor? 
} 
+1

Просьба представить компиляционный код ... У вас отсутствуют заголовки, и все ваши конструкторы являются частными. – Holt

+0

И да, это из-за копирования-элиции, попробуйте выполнить компиляцию с '-fno-elide-constructors', если вы используете clang или g ++. – Holt

+2

Возможный дубликат [Что такое оптимизация ссылок и возврат значения?] (Http://stackoverflow.com/questions/12953127/what-are-copy-elision-and-return-value-optimization) – Holt

ответ

0

Вы правы, это копия элизия, компилятор делает оптимизации и создает объекты прямо на месте памяти, выделенной в массиве, поэтому конструктор копирования не дозвонился.

+0

Спасибо, что это копия elision но вы можете уточнить его, я скомпилировал прог с опцией «-fno-elide-constructors», после чего вызывается конструктор копирования. –