티스토리 뷰

소멸자를 virtual로 만들어주면 자식클래스의 소멸자가 실행되고 부모 클래스의 소멸자가 실행된다.

 

#include<iostream>

using namespace std;

class Base
{
	public:
	virtual ~Base()
	{
		cout << "~Base" << endl;
	}
};

class Derived : public Base
{
	private:
	int *m_array;
	
	public:
	Derived(int length)
	{
		m_array = new int[length];
	}
	
	virtual ~Derived() override
	{
		cout << "~Derived" << endl;
		delete[] m_array;
	}
};

int main()
{
	// Derived derived(5);
	
	Derived *d = new Derived(5);
	Base *base = d;
	delete base;
	
	return 0;
}

// ~Derived
// ~Base

 

 

12.5 동적 바인딩과 정적 바인딩

 

int main()
{
	int x, y;
	cin >> x;
	cin >> y;
	
	int op;
	cin >> op;
	
	// Static binding
	int result;
	switch(op)
	{
		case 0: result = add(x, y); break;
		case 1: result = subtract(x, y); break;
		case 2: result = multiply(x, y); break;
	}
	
	
	// Dynamic binding
	int (*func_ptr)(int, int) = nullptr;
	
	switch(op)
	{
		case 0: func_ptr = add; break;
		case 1: func_ptr = subtract; break;
		case 2: func_ptr = multiply; break;
	}
	
	cout << func_ptr(x, y) << endl;
}

 

속도는 static binding이 더 빠르다.

 

하지만, Dynamic binding의 경우 프로그래밍이 훨씬 유연해진다.

 

그러므로 양날의 검이 될 수 있다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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 31
글 보관함