Introduction
----------------------------------------------------------------------------------------------
기존의 swap은 어떤 타입이든(대입 연산자 '=' 를 이용할 수 있다면) 가능한 std 범용 함수이다. 하지만 클래스 내부 멤버 변수가 엄청나게 큰 데이터를 가지고 있다면, 복사에 드는 비용은 실로 어마어마하다고 할 수 있다. 이런경우 두 객체의 멤버 변수 포인트만 바꿔주는, 기존의 동작과는 약간 다른 특화된 swap을 만들 필요가 있다. 지금부터 설명하고자 하는 특화된 swap에 대한 방법은 Effective c++에서 소개한 방법을 인용하기로 한다.
Before implementing specialized swap function
----------------------------------------------------------------------------------------------
1. 표준 제공 swap함수의 성능이 내가 만든 클래스에서 만족할 만한 성능을 지니면
그냥 쓴다.
2. 그렇지 않은 경우 클래스 내부에 swap 멤버 함수를 퍼블릭으로 선언하라. 그리고
그 안에는 빠른 swap 알고리즘을 기술한다.
(예) MyClass {
public:
...
swap(MyClass target) { // Write Fast swap algo }
private:
...
};
3. 내가 구현한 클래스를 둘러싸고 있는 네임스페이스 안에 swap 함수를 많들어 넣고
이 함수 안에서 MyClass에서 만든 swap 멤버 함수를 호출하도록 만든다.
namespace MyNamespace
{
...
MyClass {
...
};
...
void swap(MyClass& a, MyClass& b)
{
a.swap(b);
}
} // end - MyNamespace
< Suggestion > swap은 절대로 예외를 발생시키자 않도록 만들어라. swap은 예외 발생시 이전상태로 돌릴수 있게 응용할 수 있는 강력한 함수이기 때문에(strong- exception-safety guarantee) 예외를 던지지 않게 설계한다면 유용하게 이용할 수 있을 것이다.
----------------------------------------------------------------------------------------------
기존의 swap은 어떤 타입이든(대입 연산자 '=' 를 이용할 수 있다면) 가능한 std 범용 함수이다. 하지만 클래스 내부 멤버 변수가 엄청나게 큰 데이터를 가지고 있다면, 복사에 드는 비용은 실로 어마어마하다고 할 수 있다. 이런경우 두 객체의 멤버 변수 포인트만 바꿔주는, 기존의 동작과는 약간 다른 특화된 swap을 만들 필요가 있다. 지금부터 설명하고자 하는 특화된 swap에 대한 방법은 Effective c++에서 소개한 방법을 인용하기로 한다.
Before implementing specialized swap function
----------------------------------------------------------------------------------------------
1. 표준 제공 swap함수의 성능이 내가 만든 클래스에서 만족할 만한 성능을 지니면
그냥 쓴다.
2. 그렇지 않은 경우 클래스 내부에 swap 멤버 함수를 퍼블릭으로 선언하라. 그리고
그 안에는 빠른 swap 알고리즘을 기술한다.
(예) MyClass {
public:
...
swap(MyClass target) { // Write Fast swap algo }
private:
...
};
3. 내가 구현한 클래스를 둘러싸고 있는 네임스페이스 안에 swap 함수를 많들어 넣고
이 함수 안에서 MyClass에서 만든 swap 멤버 함수를 호출하도록 만든다.
namespace MyNamespace
{
...
MyClass {
...
};
...
void swap(MyClass& a, MyClass& b)
{
a.swap(b);
}
} // end - MyNamespace
< Suggestion > swap은 절대로 예외를 발생시키자 않도록 만들어라. swap은 예외 발생시 이전상태로 돌릴수 있게 응용할 수 있는 강력한 함수이기 때문에(strong- exception-safety guarantee) 예외를 던지지 않게 설계한다면 유용하게 이용할 수 있을 것이다.
'Programming' 카테고리의 다른 글
VIM 에 이런 기능이 - 소스코드를 html 문서로 변환하기 (0) | 2008.09.26 |
---|---|
About Exception-safety guarantee - 예외 안전성 보장 (0) | 2008.09.19 |
병렬처리와 관련한 소중한 자료.. (0) | 2008.09.09 |
asio C++ library (0) | 2008.05.22 |
Thread 관련 참조 자료 (0) | 2008.04.30 |
댓글