목록C++ (16)
코가손의 블로그
깊은 복사 두 개의 값(인스턴스, 객체)이 생성됨 얕은 복사 원본은 하나, 두개의 포인터가 생성 됨 메모리 해제시 Double Free 문제 발생할 수 있음 class Data { public: Data(int param) { _data = new int; *_data = param; } ~Data() { delete _data; } int GetData() { return *_data; } private: int* _data = nullptr; }; int main() { Data a = 10; Data b = a; cout
지역 변수 지역 변수는 블록 스코프(영역)가 있고 블록이 소멸되면 따라 소멸되는 자동 주기를 가지고 있다. 전역 변수 함수 외부에서 정의된 변수를 전역 변수라고 한다. 전역변수는 정적 주기로, 프로그램이 시작할 때 생성되고 프로그램이 종료할 때 파괴된다(메모리->데이터 영역) 이것은 전역 변수가 정의된 시점부터 소스 파일의 끝까지 접근 가능하다는 것을 의미한다. 변수는 스코프(영역), 주기 외에도 링크라는 속성이 있다. 링크는 같은 이름의 여러 식별자가 같은 식별자를 참조하는지를 결정한다. static 내부 링크가 있는 변수를 static 변수라고 한다. static 변수는 변수가 정의된 소스 파일 내에서 어디서나 접근할 수 있지만, 소스 파일 외부에서는 참조할 수 없다. static함수는 static멤..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bqicEA/btrkos3TuRy/onkZJtiEe8Wqn4bQFJeQ9k/img.png)
소스 코드는 아래의 그림과 같은 과정을 거쳐 실행 파일(.exe)로 만들어 진다. 전처리기(preprocessor) : 소스 코드의 주석 제거, define을 치환하는 단계 컴파일러(compiler) : 어셈블리 파일로 변환, 어셈블리코드는 CPU 명령어 조합이며 어셈블리어는 CPU에 의존적임 어셈블러(assembler) : 오브젝트 코드 파일로 변환, 오브젝트 코드는 0과 1로 이루어진 코드이다. 주소 정보는 아직 확정되지 않은 상태이다. 링커(linker) : 오브젝트 파일들을 묶어서 실행 코드 파일로 변환한다. 운영체제가 로딩할 수 있도록 주소 정보를 할당한 파일을 만들어 낸다. 그래서 링커는 운영체제에 의존적이다. 전처리 과정 전처리기는 헤더 파일들과 메크로를 치환하여 프로그램에 적용한다. 전처리..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dfKXTJ/btrklWEWPGX/0nMsiWZlEwMuQiWBaMYrek/img.png)
▶ 포인터 더보기 선언 int number = 1; int* pointer; pointer = &number; 포인터는 주소를 담을 수 있고 int 타입이든 char 타입이든 컴파일러(32bit->4바이트, 64bit->8바이트)에 따라 고정된 크기의 주소가 할당된다. 산술 연산자 +- pointer += 1; 포인터형에 1을 더하면 주소값이 4가 증가한다. int형은 4바이트의 크기를 가지고 있기 때문이다. 포인터 타입에 따라 증가하는 주소값이 달라진다. 간접 연산자 *pointer = 3; pointer가 가리키는 주소의 값을 3으로 변경한다. *pointer식으로 포인터가 가리키는 값(주소)에 접근할 수 있다. 간접 멤버 연산자 -> // player클래스를 가리키는 playerPtr있다고 가정 p..