형변환 C에서 부터 캐스트 연산자는 변수 타입을 바꾸는 방면에서 편리하고 유연한 코드 작성을 하도록 도와준다. 하지만 그 결과 실제 데이터의 크기가 변환되는 과정에서 데이터가 손상되거나 메모리 공간이 부족할 경우 할당할 수 없게 될 수 있다. 또한 클래스 간 형변환에서 가장 중요한 사실은 "컴파일러는 다운캐스팅이 올바르게 일어났는지 모른다."는 것이다. 하여 개발자는 형변환이 가능한지 항상 먼저 확인해야하고 정말 확인을 못하는 경우 C++에서 지원하는 형변환 연산자들을 통해 변환이 가능한 상황을 확인하고 진행해야한다. C++는 형변환을 좀 더 안전한 변환을 위해 4개의 형변환 연산자를 제공한다. 형변환에 대한 글은 이전 글에도 있으니 잠시 살펴보자. 형변환 연산자의 필요성 타입 안전성 및 명확성 C의 형..

업캐스팅 (Upcasting) 업캐스팅은 자식 클래스 타입에 대한 참조(포인터 혹은 레퍼런스)를 부모 타입으로 형변환하는 것이다. 부모클래스 *b = new 자식클래스; 위 코드는 분명 다른 자료형임에도 어떠한 오류가 발생하지 않는다. 이는 자식 클래스에서 부모 클래스 객체에 할당될때 묵시적 형변환이 일어나기 때문이다. (실제로 모든 업캐스팅은 묵시적으로 일어날 수 있다.) 이는 포인터뿐만 아니라 좌변이 부모 클래스 레퍼런스 변수일 때도 일어난다. 이는 Call-By-Reference에도 발생한다. 자식클래스 d; 부모클래스 &p = d; void f(부모클래스 &b) { // ... } int main() { 자식클래스 d; f(d); ) 하지만 포인터나 레퍼런스를 사용하지 않고 객체 자체끼리 대입하려..

스마트 포인터와 일반 포인터 동적 할당 객체는 delete 키워드를 통해 매번 할당 해제를 해야한다. 하지만 C++11부터는 스마트 포인터를 통해 메모리 해제를 자동으로 할 수 있게 된다. 하지만, 모든 포인터를 스마트 포인터로 사용하는 것이 아니기에 일반 포인터가 사용되는 시점과 포인터의 소유권의 위치를 명확히 알아야 할당 해제에 어려움이 없을 것이다. 메모리 소유권 (Memory Ownership) "메모리 소유권"이라는 용어는 일반적으로 프로그래밍에서 메모리 리소스의 소유 및 관리에 관련된 개념을 나타냅니다. 이는 특히 메모리 할당과 해제에 관련된 것이다. int *a, *b; a = new int(5); b = a; cout

이동 시맨틱 (Moving Semantics) 깊은 복사와 얕은 복사의 개념을 먼저 공부하면, 이동 시맨틱이라는 개념을 알아볼 수 있다. 우선 깊은 복사란, 하나의 변수 값을 다른 변수에 완벽히 복제하여 두 변수가 독립적인 형태로 메모리에 할당되는 것이다. 얕은 복사란, 하나의 변수 값을 가르키는 주소 값을 다른 변수도 동일하게 가지게되어 두 변수가 동일한 메모리 영역을 가리키게 되는 것이다. 이동 시맨틱은 객체의 소유권을 다른 객체로 옮기는 방법이며, 불필요한 데이터 복사를 피하고 성능을 향상 시킨다. 그러면 다음 예제를 보자. 이중 깊은 복수 class MyString { public: char* getName() { string name = "Hong"; return name; } }; int ma..
- Total
- Today
- Yesterday
- 할당
- 멀티스레드
- 컴파일
- 게임수학
- 입출력
- static_cast
- 초기화
- c++
- 레지스터
- 프로세스
- 스레드
- 메모리
- 수학
- thread
- 크기
- CPU
- 구조
- 명령어
- 포인터
- 클래스
- 함수
- 백준
- const
- 운영체제
- malloc
- 상속
- dynamic_cast
- 알고리즘
- 인터럽트
- New
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |