C++ бағдарламалау тілінде көшіру құрылғысы – бұл объектінің көшірмесін жасауға арналған арнайы құрылғы. Автоматты және қолданушы анықтамалы түрлері бар.
Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Мазмұны
Кіріспе
C++ бағдарламалау тілінде көшірме конструкторы – жаңа объектіні қолданыстағы объектінің көшірмесі ретінде жасауға арналған ерекше конструктор. Көшірме конструкторлары C++-та объектілерді көшірудің стандартты жолы болып табылады, клондаудан өзгеше және C++-қа тән ерекшеліктері бар. Мұндай конструктордың бірінші аргументі – құрастырылып жатқан объектінің типімен (const немесе non const) бірдей типтегі объектіге сілтеме, одан кейін кез келген типтегі параметрлер (барлығының әдепкі мәндері бар) болуы мүмкін. Көбінесе компилятор әрбір класс үшін көшірме конструкторын автоматты түрде жасайды (жасалма көшірме конструкторы деп аталады), бірақ ерекше жағдайларда бағдарламашы көшірме конструкторын жасайды, ол пайдаланушы анықтаған көшірме конструкторы деп аталады. Мұндай жағдайларда компилятор оны жасамайды. Сондықтан, әрқашан пайдаланушы немесе жүйе анықтаған бір көшірме конструкторы болады. Пайдаланушы анықтаған көшірме конструкторы, әдетте, объектінің иелігінде көрсеткіштер немесе бөлісе алмайтын сілтемелер болған кезде қажет, мысалы, файлға сілтеме жасағанда, онда деструктор мен тағайындау операторы да жазылуы тиіс (үштік қағиданы қараңыз).
In the C++ programming language, a copy constructor is a special constructor for creating a new object as a copy of an existing object. Copy constructors are the standard way of copying objects in C++, as opposed to cloning, and have C++ specific nuances. The first argument of such a constructor is a reference to an object of the same type as is being constructed (const or non const), which might be followed by parameters of any type (all having default values). Normally the compiler automatically creates a copy constructor for each class (known as an implicit copy constructor) but for special cases the programmer creates the copy constructor, known as a user defined copy constructor. In such cases, the compiler does not create one. Hence, there is always one copy constructor that is either defined by the user or by the system. A user defined copy constructor is generally needed when an object owns pointers or non shareable references, such as to a file, in which case a destructor and an assignment operator should also be written (see Rule of three).
Мысалдар
Бұл мысалдар көшірме жасаушылардың қалай жұмыс істейтінін және олардың кейде қажет болу себебін түсіндіреді.
These examples illustrate how copy constructors work and why they are sometimes required.
Бит бойынша көшірме жасаушы
C++-та "биттік көшірме жасаушы" деген ұғым жоқ. Дегенмен, автоматты түрде жасалған көшірме жасаушы мүшелердің көшірме жасаушыларын шақыру арқылы көшірмелейді, ал шикі көрсеткіш мүшесі үшін бұл шикі көрсеткіштің өзін көшіреді (яғни, терең көшірме жасалмайды).
There is no such thing as "bitwise copy constructor" in C++. However, the default generated copy constructor copies by invoking copy constructors on members, and for a raw pointer member this will copy the raw pointer (i. e. not a deep copy).
Логикалық көшірме жасаушысы
Логикалық көшірме конструкторы құрылымды және оның динамикалық құрылымдарын нақты көшіреді. Логикалық көшірме конструкторлары көбінесе көшіріліп жатқан объектінің ішінде көрсеткіштер немесе күрделі объектілер болғанда қолданылады.
A logical copy constructor makes a true copy of the structure as well as its dynamic structures. Logical copy constructors come into the picture mainly when there are pointers or complex objects within the object being copied.