1. C++ 복사생성자 구조, 사용방법, 예시
포인터를 멤버변수로 가지고 있는 경우에 대한 Deep Copy를 통한 명시적인 새로운 객체 선언
CMydata(const CMydata &rhs)
: // Initialization Block
{
}
2. C++ 대입연산자 구조, 사용방법, 예시
a = b는 기본적으로 shallow copy가 이루어 지기 때문에, deep copy를 명시적으로 선언해주기 위함.
CMyType& operator=(const CMyData &rhs)
{
}
// 생성자와는 다른, 연산자임을 잊지말자!
3. 묵시적 변환과, 허용되는 변환
묵시적 변환 - 매개변수가 한개인 "변환 생성자"가 암묵적으로 호출되는 것 = 컴파일러가 알아서 임시객체를 생성한 후 임시 객체에 대한 참조가 전해지는 형식.. explicit으로 차단가능
허용되는 변환 - 형변환 연산자를 사용하여 Class를 다른 자료형으로 변환 가능 (Java의 toString을 통해 호출하는 것과 유사한 느낌)
operator int(void)
{
return m_nData;
}
4. 이름 없는 임시 객체
연산 과정 혹은 함수의 반환이 특정 Class형인 경우 생김.
a = 3 + 5; 라고 선언했을때만 해도, 3+5 계산이 먼저 이루어진 뒤, 8의 값을 가진 상수형 인스턴스가 생성되고, a에 그 값이 복사되고 나서, 소멸된다. 간단한 연산의 경우 큰 overhead를 만들지 않겠지만, 어떤 대상을 연산하는지에 따라 메모리 활용 및 성능에 중요한 역할을 할 수 있다.
5. R-value
R-value는 상수형에 대한 참조다!
매개변수 형식 | 실인수 예 | 비고 |
---|---|---|
TestFunc(int) | int x= 3; | |
TestFunc(x); | ||
TestFunc(3); | ||
TestFunc(3+4); | ||
TestFunc(int&) | int x = 3; | |
TestFunc(X); | ||
TestFunc(int&&) | int x = 3; | TestFunc(x)불가능! |
TestFunc(3); | ||
TestFunc(3+4); | ||
TestFunc(x+4); |