Конструктор копіювання

Конструктор копіювання є конструктором особливого типу: він приймає як параметр константне посилання на об'єкт класу (const тип_класу &) чи просте посилання на об'єкт (тип_класу &). Наприклад:

Class Card

{int x,y;

public:

Card(const Card & src);};

Card::Card(const Card & src)

{x=src.x;

y=src.y;}

Розглянемо застосовність конструкторів копіювання. Напишемо програму:

#define LARGE 30000

Struct Large

{int data[LARGE];

Large (void)

{for(int i=0;i<LARGE;i++)

data[i]=i;}

~Large(void){}

Large slow(Large b)

{Large ans;

{for(int i=0;i<LARGE;i++)

ans.data[i]=b.data[i];

return ans;}};

Main()

{Large a,b;

{for(int i=0;i<100;i++)

a.slow(b);};

Час її роботи порівняно тривалий. Як збільшити швидкодію? Це можна зробити з використанням конструктора копіювання:

Class Large1

{private:

Large1(const Large1 & b);

public:

int data[LARGE];

Large1(void)

{for(int i=0;i<LARGE;i++)

data[i]=i;}

~LARGE1(void){}

Large1 fast(const Large1 &);

};

Large1::Large1(const Large1 & b);

{for(int i=0;i<LARGE;i++)

data[i]=b.data[i];}

inline Large1 Large1::fast(const Large1 & b)

{return Large1(b);}

Main()

{Large1 a,b;

for(int i=0;i<100;i++)

a.fast(b);};

Ця версія програми, що використовує конструктор копіювання, працює значно швидше, адже за рахунок конструктора копіювання не створюються локальні копії структур. Конструктор у закритій частині опису класу використовується для прискорення оператора return у fast. Це можна пояснити тим, що дані, розміщені в закритому розділі класу, у даному випадку містяться в одному сегменті, і доступ до них здійснюється з використанням near -адресації, тобто одного лише зміщення.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: