소멸자 Destructor
변수가 영역을 벗어나 사라질때 호출이되는 함수
소멸자를 선언할땐 ~클래스명()으로 선언한다.
//IntArr클래스의 소멸자 생성
public:
//소멸자 Destructor
//지역을 벗어날때 자동으로 실행된다.
~IntArr() {
if (m_arr != nullptr) {
delete[] m_arr;
}
동적할당을 받을때 자주 사용한다.
반복문에서 동적할당을 할때 delete를 소멸자로 선언해 놓으면 자동으로 메모리를 반납한다.
#include <iostream>
using namespace std;
class Simple
{
private:
int m_id;
public:
Simple(const int& id)
:m_id(id) {
cout << "Constructor" << m_id << endl;
}
~Simple() {
cout << "Destructor" << m_id << endl;
}
};
class IntArr
{
private:
int *m_arr = nullptr;
int m_length = 0;
public:
IntArr(const int length_in) {
m_length = length_in;
m_arr = new int(length_in);
}
//소멸자 Destructor
//지역을 벗어날때 자동으로 실행된다.
~IntArr() {
if (m_arr != nullptr) {
delete[] m_arr;
}
}
int size() {
return m_length;
}
};
int main()
{
//{}지역을 벗어날때 자동으로 소멸자가 자동으로 실행
Simple *s1 = new Simple(0);
Simple s2(1);
Simple s3(2);
delete s1;
return 0;
}
this포인터
클래스를 붕어빵찍는 틀을 비유한다.
생성된 붕어빵은 인스턴스이다.
각인스턴스들을 구분하는 방법
this포인터는 클래스안에 숨어있다.
숨어있는 this로 자기 자신의 주소를 알 수 있다.
클래스안에 함수들에 this가 선언되어있지만 안보이는것이다.
void setId(int id) {
//this -> m_id = id;
m_id = id;
}
클래스안에 함수들은 클래스가 선언될때마다 만들지 않는다.
함수가 하나만 선언되고 메모리주소와 설정한 인자값을 넣어주는 구조이다.
연쇄호출 Chaining Member Functions
체이닝함수
this포인터를 이용해 자기자신을 다시 호출한다.
체이닝함수는 한번에 여러번 선언할 수 있다.
#include <iostream>
using namespace std;
class Simple
{
private:
int m_id;
public:
Simple(const int &id)
:m_id(id) {
cout <<"this : "<< this << endl;
//->포인터에 값을 넣는것
this->m_id;
}
void setId(int id) {
//아래 this->가 생략되어 보이는것이다.
//this->m_id =3;
m_id = id;
}
int getId() {
return m_id;
}
//체이닝 함수
Simple& nextId() {
m_id += 1;
return *this;
}
void print() {
cout << "nextId : " << m_id << endl;
}
};
int main()
{
Simple s1(1), s2(2);
s1.setId(3);
s2.setId(4);
s2.print();
/*
체이닝함수 동작의 이해
Simple& sim = s2.nextId();
sim = s2.nextId();
sim = s2.nextId();*/
s2.nextId().nextId().nextId().print();
cout << "&s1 : " << &s1 << " &s2 : " << &s2 << endl;
return 0;
}
'개발 소발 > 개발 C++(기초)' 카테고리의 다른 글
c++ static 정적멤버변수,정적멤버함수 (0) | 2019.08.08 |
---|---|
c++ 클래스와 const (0) | 2019.08.08 |
c++ 생성자멤버초기화,위임생성자 (0) | 2019.08.05 |
c++ 생성자 Constructor (0) | 2019.08.05 |
c++ 캡슐화,접근지정자,접근함수 (0) | 2019.08.05 |