언어 55

스마트 포인터

RAII RAII : Resource Acquisition Is Initialization 리소스의 라이프사이클과 오브젝트의 라이프사이클을 일치시킨다는 뜻이다. 여기서 리소스란 메모리, 쓰레드, 파일IO, 뮤텍스 ,DB와의 커넥션 등이 있다. C++ 에서는 스마트 포인터를 이용하여 메모리 리소스와 인스턴스의 라이프사이클을 일치시킬 수 있다. unique_ptr 유니크 포인터는 exlusive ownership을 제공하는 스마트 포인터다. 유니크 포인터는 하나의 오브젝트(메모리 영역)을 단 하나의 포인터만 가리키게 한다. include ... class Cat { public : Cat() : mAge{1} {} ~Cat(){} void speak(){cout

언어/C++ 2020.11.08

C# 의 타입 - 2. 기본 타입 (Primitve Type)

기본 타입 (Primitve Type) 32비트의 정수형 변수를 할당한다면 다음과 같이 코드를 쓸 수 있다. System.Int32 a = new System.Int32(); 그런데 이렇게 쓰면 너무 귀찮으니까... 대부분의 컴파일러는 다음과 같이 표현하도록 해준다. int a = 0; 그리고 위와 같은 코드는 System.Int32 타입을 사용한 코드와 의미가 동일한 IL 코드를 만들어준다. 이처럼 컴파일러가 직접 지원하는 데이터 타입들을 기본 타입이라고 부른다. C#의 기본 타입과 FCL에 대응되는 타입은 다음과 같다. 기본 타입 FCL 타입 CLS 호환 비고 sbyte System.SBtye ㄴㄴ byte System.Byte ㅇㅇ short System.Int16 ㅇㅇ ushort System.U..

언어/C# 2020.10.31

C# 의 타입 - 1. 타입의 기초

System.Object c#의 모든 타입들은 System.Object를 상속받는다. class A // class A : System.Object 와 같다. (암시적으로 상속) { // code } Object 클래스에는 필드는 존재하지 않으며 다음과 같은 메서드들이 존재한다. (~Object()는 Finalize 메서드이며 protected임) namespace System { public class Object { public Object(); ~Object(); public static bool Equals(Object objA, Object objB); public static bool ReferenceEquals(Object objA, Object objB); public virtual boo..

언어/C# 2020.10.31

L_value와 R_value

L-value & R-value L value는 왼쪽에 있는 거, R value는 오른쪽에 있는 거... 가 아니다. L-value는 나중에 다시 부를 수 있는 것. R-value는 그렇지 못한 것.으로 구분하면 쉽다. 예를 들어, int a=0; int b=a; 에서 a 는 L-value이다. 0은 다시 부를 수 없으므로 R-value이다. b 역시 L이겠지? R-value는 임시적으로 생성된 값이라고 볼 수 있다. 그러면 대체 왜 이런 걸 구분할까? R-value를 잘 이용하면 메모리를 효율적으로 사용할 수 있기 때문이다. 예를 들어, 어떤 값이 R-value이고 이 값을 전달하기 위해 몇 개의 변수를 거친다고 가정해보자. 이 값을 전달하기 위해 변수를 거칠 때마다 값을 복사할 필요가 있을까? 어차피..

언어/C++ 2020.10.11