C++ 복사 생성자 / 소멸자 함수
by 으렴
복사생성자(복사하는 기능) → 주로 public
함수 4가지
1. 객체 생성시 매개변수로 객체를 넘겨줄경우.
2. 객체 생성시 객체를 대입할경우.
3. 멤버함수에 매개변수로 객체를 선언할 경우.
4. 멤버함수에서 객체를 리턴할경우.
복사생성자도 생성자임. 객체등록도해주면서 카피를 같이함.
C++ 일반적 생성자와 복사생성자가 있음.
클래스에 있는 모든 필드(값)를 전체 카피함.
A(const A &aa)
{
}
얕은 복사(디폴트) → 기본적으로 제공됨.
깊은 복사(개발자가 직접 코딩을 해야한다) → 명시적으로 일일히 작업 해주어야 한다.
언제? 필드를 포인터로 사용했을 경우에는 무조건 깊은 복사를 해야한다.
복사생성자함수
1. 호출시기
1) 객체 생성시 객체를 인자로 줄 경우.
A aa; => 생성자호출
A bb(aa); => 복사생성자호출
2) 객체 생성시 객체를 대입 할 경우.
A aa; => 생성자호출
A bb = aa; => 복사생성자호출
3) member function의 매개변수로 객체를 선언 할 경우.
void A :: disp( A aa )
4) 멤버함수에서 객체를 리턴할 경우.
A getObject()
{
return 객체; //복사 생성자 호출
}
2. 객체의 모든 멤버의 값을 복사하는 기능을 제공.
3. 기본적으로 얕은 복사를 제공.
4. 깊은 복사는 기본적으로 제공하지 않기 때문에 개발자가 필요에 의해 제공해야 함.
*This에 대하여 설명 : 자기자신을 가리키는 객체포인터
void setA(int a1)
{
a=a1;
}
소멸자 함수
1. 객체 소멸 시 자동 호출 되어지는 함수
1) 객체가 속해있는 함수가 끝날 때(정적)
2) 동적메모리를 해제할 때(동적)
2. (틸드)~클래스명(){}
3. 매개변수 선언할수없다.
4. 오버로딩 불가(1class내에 딱 1개 있음.)
5. const member function으로 만들수없다.
6. 객체의 잔여메모리를 깨끗하게 정리하는 역할.(개발자가 직접 해 주어야 한다)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 |
#include<iostream>
using namespace std;
class A
{
int *p;
public:
A(int i = 0)
{
p=new int;
*p = i;
}
A(const A& aa)
{
p = new int;
*p = *aa.p;
}
~A()
{
delete p;
}
int getP(){return *p;}
};
void main()
{
A aa(10);
A bb(aa);
cout<<bb.getP()<<endl;
} |
cs |
가상함수(자바 = 추상메소드)
'Programming Language > C and Cpp' 카테고리의 다른 글
C++ DAY4 const (0) | 2018.03.08 |
---|---|
C++ DAY4 static method (0) | 2018.03.08 |
C++ DAY3 class와 생성자 함수 (1) | 2018.03.07 |
C++ 명시적 오버로딩 / 암시적 오버로딩 (0) | 2018.03.06 |
C++ DAY2 성적 입출력 프로그램 (0) | 2018.03.06 |
사이트의 정보
코딩하렴
으렴