소멸자 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;
}

 

+ Recent posts