Copy constructor
ืื ืื ืืขืชืงื (ืืขืืจืืช: ืืฉืื) - ืืชืืื ืฉื ืืืืงื ืืืืคืขืืช ืืขืช ืืฆืืจืช ืืืคืข ืฉื ืืืืืงื ืืืขืชืงื (=ืฉืืคืื) ืฉื ื ืชืื ื ืืืคืข ืงืืื. ืืฉืคืช C++ (ืืื ืื ืฉืคืืช ืืืจืืช ืืืืคืฉืจืืช ืชืื ืืช ืืื ืื ืขืฆืืื) ืื ืื ืืขืชืงื ืืื ืคืื ืงืฆืื ืืขืืช ืฉื ืืื ืืฉื ืืืืืงื ืฉืื ืืื ืืืืืจืช.
ืืืืื ืื ืืื ืฉื ื ืกืืื ืืขืชืงื:
- "ืืขืชืงื ืจืืืื" (Shallow copy) - ืืืืฆืขืช ืขื ืืื ืื ืื ืืืขืชืงื, ื-copy constructor, ืืืืืืืื ืฉื ืฉืคืช ืืชืื ืืช (ืืืืืจ ืฉืืืืจ ืฉืืชืืื ืืช ืขืืืจืช ืืื ืคืจืืฆืื, ืืืืจื, ืฉืืื ืืืขืชืงื ื ืืคืืื ืฉืงืืคืื ืืืืืฆืขืื ืืคื ืฉืืงืืื ืืืขืจืืช ืืืื ืฉืืืชืื ืช ืืฉ ืืคืฉืจืืช ืืฉืืื ืืืืงืจ ืืืชื)
- "ืืขืชืงื ืขืืืงื" (Deep copy), - ืืื ืืืืื ืืืชื ื ืืจืฉ ืืืชืื ืช ืืืฆืืจ ืืช ืื ืื ืืืขืชืงื ืืขืฆืื, ืืขืืงืจ ืืืงืจื ืฉื ืืฆืืืขืื.
ืืขืชืงื ืขืืืงื ืืืคืืช ืื ืชืื ืื ืฉืืื ื ืืืืจืื ืืขืืืจ ืืขืฆื ืืขืฆื ืืคื ืฉืื. ืืืืืื ืืืืืืช ืืื ืืื ืืฆืืืขืื. ืื ื ืกืชืคืง ืืืขืชืงื ืจืืืื ืื ืขืชืืง ืืฆืืืข ืืื ืืขืฆื ืืขืฆื, ืืขืฉื ืฉื ื ืขืฆืืื ืฉืืืืฉ ืืืืชื ืืฆืืืข. ืื ืฉืื ืื ืืขืฆื ืืื ืฉืื ืืฉืชื ื ืชืืื ืืชืืืช ืืืืืจืื ืืืืฆืืขืช (ืื ืื ืชืฉืชื ื ืืชืืืช ืืืืืจืื ืขืฆืื) ืืืจืืจ ืฉืื ืืืื ืื ืืขืฆื ืืืืจ. ืืฆื ืืื ืืจืื ืืื ื ืจืฆืื.
ืืฉืคืช C++, ืื ื ืืชื ืืืฆืืืจ ืขื ืื ืื ืืขืชืงื, ืืืื ืืืฆืืืจ ืขื ืื ืื ืืจืืจืช- ืืืื (Default Constructor), ืืฃ ืขื ืคื ืฉืืืืืจ ืืจืื ืืืฆืืจ ืืืชื ืขื ืคื ืจืฆืื ืืืชืื ืช.
ืืื ืื ืืืขืชืงื ืืงืจืืื ืืื ืื ืฉืืืชืืืืกืืช ืืื ืืงืืืข (const) ืืื ืืืฉืชื ื (ืืืืืจ: const value&) ืืืืืื, ืฉืื ืืฉืื ื ืืืฉืชื ื ืฉื ืืขืฆื ืืืืขืชืง.
ืึพ.NET ืืึพJava ืงืืืืช ืคืื ืงืฆืืืช Clone ืืืืืืจืช ืขื ืืืืงืช ืืฉืืจืฉ (Object) ืืืืฆืขืช ืืชืืจ ืืจืืจืช ืืืืื ืืขืชืงื ืจืืืื ืื ืืชื ืืืจืืก ืืืชื ืื ืฉืชืืฆืข ืืขืชืงื ืขืืืงื (ืืฉืชื ืืกืืืืืช ืืื Copy constructor).
ืืืืื ืืืืืืฉ ืืชืื ืืช (C++)
[ืขืจืืืช ืงืื ืืงืืจ | ืขืจืืื]class CPerson {
int m_iAge;
string m_szName;
Person* m_pMother;
public: CPerson(const CPerson& p) {
m_iAge=p.m_iAge;
m_szName=p.m_szName;
//This check would make sense for an assignment operator, but not for a copy constructor,
//since the object should always be a new one.
//if (NULL != m_pMother) {
// delete(m_pMother);
// m_pMother = NULL;
//}
if (NULL != p.m_pMother) {
m_pMother=new Person(p.m_pMother);
}
}
};