commit 2025-08-25 14:19 edit a bit ZCppMain/ZMainHead.H

This commit is contained in:
2025-08-25 14:19:37 +09:00
parent a7dd27c31c
commit 09245f44ed

View File

@ -3728,7 +3728,7 @@ namespace ZNsCPP */
#endif // __linux__
__linux__라는 이름을 사용하라. linux가 아니다.
__linux__라는 이름을 사용하라. linux 가 아니다.
후자가 정의되어 있기는 하지만 POSIX 규격에는 맞지 않기 때문이다.
■ 각 OS 별 Shared Library PATH 환경 변수 (2012-04-08 19:25:00)
@ -3797,31 +3797,39 @@ namespace ZNsCPP */
(2007/04/03 16:20)
http://blog.naver.com/cppis/60036113050
bugmail에게 More Effective C++을 빌려 보던 중 일반적으로 많이 쓰던 new 와 delete 에 대해서 소홀하게 넘어갔던 부분을
보고 정리를 하게 되었습니다. 저와 마찬가지로 많은 사람들이 'new operator' 와 'operator new'를 혼동하시는 것 같아서
간단히 정리해봤습니다.
bugmail 에게 More Effective C++을 빌려 보던 중 일반적으로 많이 쓰던 new 와 delete 에 대해
서 소홀하게 넘어갔던 부분을 보고 정리를 하게 되었습니다. 저와 마찬가지로 많은 사람들이
'new operator'는 C++ 에서 제공하는 연산으로 두 가지 동작을 수행합니다.
new operator 와 operator new
-- 먼저, 요청한 타입 크기의 메모리를 할당하고, 다음으로, 타입 인스턴스의 생성자를 호출하여 초기화를 수행합니다.
를 혼동하시는 것 같아서 간단히 정리해봤습니다.
C++ 컴파일러는 'new operator'를 위의 내용처럼 코드로 만들어냅니다. 'operator new'란 바로 요청한 타입 크기의 메모리
를 할당하는 동작을 수행하는 Operator입니다.
new operator 는 C++ 에서 제공하는 연산으로 두 가지 동작을 수행합니다.
따라서 위의 내용을 다시 요약하면, 'new operator'는 'operator new'로 메모리를 할당하고, object 의 생성자를 호출하는
동작을 한다." 라고 할 수 있습니다.
-- 먼저, 요청한 타입 크기의 메모리를 할당하고, 다음으로,
-- 타입 인스턴스의 생성자를 호출하여 초기화를 수행합니다.
'operator new'는 Overload 될 수 있기 때문에 사용자가 자신만의 'operator new'를 정의할 수 있습니다. 또, 항상 void*
를 리턴하고, 첫번째 인자로 size_t를 받습니다. 'new operator'의 문법은 다음과 같습니다.
C++ 컴파일러는 new operator 를 위의 내용처럼 코드로 만들어냅니다. operator new 란 바로 요
청한 타입 크기의 메모리를 할당하는 동작을 수행하는 Operator 입니다.
따라서 위의 내용을 다시 요약하면, new operator 는
operator new 로 메모리를 할당하고, object 의 생성자를 호출하는 동작을 한다.
라고 할 수 있습니다.
operator new 는 Overload 될 수 있기 때문에 사용자가 자신만의 'operator new'를 정의할 수
있습니다. 또, 항상 void* 를 리턴하고, 첫번째 인자로 size_t 를 받습니다. new operator 의
문법은 다음과 같습니다.
[::] new [placement] new-type-name [new-initializer]
[::] new [placement] ( type-name ) [new-initializer]
- placement
new 를 overload 할 때 추가로 인자를 전달하는 방법을 제공합니다. 예를 들어, 표준 C++ 라이브러리의 default new는 메
모리가 바닥나면 exception 을 throw합니다. Overload 된 new 는 대신 NULL을 리턴하는데, Overload 된 new 는 다음과 같
이 정의되어 있습니다.
new 를 overload 할 때 추가로 인자를 전달하는 방법을 제공합니다. 예를 들어, 표준 C++ 라이
브러리의 default new는 메모리가 바닥나면 exception 을 throw 합니다. Overload 된 new 는 대
신 NULL 을 리턴하는데, Overload 된 new 는 다음과 같이 정의되어 있습니다.
struct nothrow_t {};
extern const nothrow_t nothrow;
@ -3835,22 +3843,23 @@ namespace ZNsCPP */
}
- type-name
할당할 타입을 명시합니다. type-name은 built-in 이거나 user-defined 타입일 수 있습니다.
할당할 타입을 명시합니다. type-name 은 built-in 이거나 user-defined 타입일 수 있습니다.
- initializer
초기화할 object를 위한 값을 제공합니다. initializer 는 object 배열을 할당하기 위해서는 사용될 수 없습니다. 'new
operator'는 default 생성자를 가지고 있는 object 의 배열만을 생성할 수 있습니다.
초기화할 object 를 위한 값을 제공합니다. initializer 는 object 배열을 할당하기 위해서는
사용될 수 없습니다. new operator 는 default 생성자를 가지고 있는 object 의 배열만을 생성
할 수 있습니다.
new 중에서 'Placement-new'는 메모리를 전혀 할당하지 않고, object 의 생성자를 호출하기 위해서만 사용됩니다. 'Placement-new'
는 일반적으로 다음과 같이 정의되어 있습니다.
new 중에서 Placement-new 는 메모리를 전혀 할당하지 않고, object 의 생성자를 호출하기 위해
서만 사용됩니다. Placement-new 는 일반적으로 다음과 같이 정의되어 있습니다.
inline void *operator new( size_t, void* p )
{
return p;
}
Automatic Variable을 제외한다면 'Placement-new'는 object 의 생성자를 호출할 수 있는 유일한 방법입니다. new 와 쌍(
Pair)인 delete도 이와 비슷합니다.
Automatic Variable 을 제외한다면 Placement-new 는 object 의 생성자를 호출할 수 있는 유일
한 방법입니다. new 와 쌍(Pair)인 delete도 이와 비슷합니다.
'delete operator'는 object 의 소멸자를 호출하고,
'operator delete'를 호출하여 메모리를 해제하는 동작을 수행합니다.
@ -3885,14 +3894,15 @@ namespace ZNsCPP */
http://kldp.org/node/76375
http://www.devx.com/tips/Tip/12756
■ 어떤 클래스에 멤버변수를 추가하게 되면 생성자에서 초기화해야 하는지 한 번 더 생각하자. 생성자에서 초기화를 빠트려
서 애먹은 적이 있었다.
■ 어떤 클래스에 멤버변수를 추가하게 되면 생성자에서 초기화해야 하는지 한 번 더 생각하자. 생
성자에서 초기화를 빠트려서 애먹은 적이 있었다.
■ 클래스가 어떤 주기적인 상태를 가지는 경우, 한 주기가 끝날 때마다 내부 버퍼를 정확하게 초기화하자. 각 포탈이나 신
문사의 검색페이지에서 검색결과를 가져와 해석할 때, 각 검색페이지의 각 리스트 항목의 데이타 추출이 끝나면, 다음 리
스트 항목을 추출할 때 관련 버퍼를 초기화해 주어야 했는데 여기에 실수가 있어서, 추출시에 이전 정보가 자꾸 들러 붙었
다. 처음에는 이게 오류인 줄 알았고 들러붙은 것이 이전 정보인지도 몰랐다. 알고보니 다음 항목 추출 전에 관련 버퍼를
초기화 안한 실수였다.
■ 클래스가 어떤 주기적인 상태를 가지는 경우, 한 주기가 끝날 때마다 내부 버퍼를 정확하게 초
기화하자. 각 포탈이나 신문사의 검색페이지에서 검색결과를 가져와 해석할 때, 각 검색 페이지
의 각 리스트 항목의 데이타 추출이 끝나면, 다음 리스트 항목을 추출할 때 관련 버퍼를 초기화
해 주어야 했는데 여기에 실수가 있어서, 추출시에 이전 정보가 자꾸 들러 붙었다. 처음에는 이
게 오류인 줄 알았고 들러붙은 것이 이전 정보인지도 몰랐다. 알고보니 다음 항목 추출 전에 관
련 버퍼를 초기화 안한 실수였다.
■ 가상함수를 상속클래스에서 재정의할 때는 기본값 인수 갯수도 동일해야 한다.