목록전체 글 (253)
bdfgdfg
std::vector 시퀀스 컨테이너는 객체들을 순차적으로 저장하는 컨테이너. std::vector는 배열의 형태로 객체를 순차적으로 저장하며 가변길이(동적) 배열이다. 즉 원소의 수가 증가하면 자동으로 배열의 메모리를 늘려 데이터를 저장한다. 먼저 std::vector를 사용하기 위해서 vector 헤더파일을 추가해야 한다. 기본적인 생성방법. 1 2 3 4 5 6 7 8 // 동적 배열이기에 처음에 크기를 정해줄 필요가 없다. std::vector v; //0으로 초기화 된 10개의 원소를 가지는 vector를 생성. std::vector v(10); //5로 초기화 된 10개의 원소를 가지는 vector를 생성. std::vector v(10,5); //v2는 v1 vector를 복사. std::v..
shared_ptr(공유 포인터) 스마트 포인터 중 하나. 이름에서 알 수 있듯이 원시 포인터가 가리키는 객체가 단 하나만이 가능한 유니크포인터와는 달리 공유포인터는 여러개의 공유포인터가 하나의 객체를 가리킬 수 있으며 아무도 가리키지 않을 때 자동으로 바로 해제 된다. 더 자세히 설명하기전에 메모리 관리기법에 대해 조금 알고있어야한다. 1. 가비지 컬렉션(Garbage Collection, GC) - Java,C#등 2. 참조 카운팅(Reference Counting) Java나 C#에서 사용되는 가비지 컬렉션은 사용하지 않는 객체를 알아서 판단하여 메모리를 회수한다. 매주기마다 가비지 콜렉션의 루트를 확인하여 힙에 있는 메모리에 루트를 통해 접근할 수 있는지 판단하고 접근할 수 없다면 가비지(쓰레기)..
스마트 포인터(Smart Pointer) C++은 new키워드를 통해 메모리를 동적할당 하였다면 메모리 누수를 막기 위해 꼭 다 사용하고 나서 delete를 해주어야 한다. C++11에서는 이러한 동적할당에 대해 더이상 직접 delete를 호출하지 않더라도 포인터가 필요하지 않게 되었을 때 자동으로 delete를 직접 호출해주는 기능이 추가 되었다. 그것이 바로 스마트 포인터. 자동으로 delete를 해준다는게 다른 객체지향 언어의 가비지 컬렉션의 개념과는 거리가 멀다. 이유는 스마트 포인터는 필요가 없어진 순간에 바로 알아서 delete를 하기 때문. (자동으로 삭제를 한다는점에선 같음) 스마트 포인터의 종류 1. unique_ptr 2. shared_ptr 3. weak_ptr 먼저 유니크 포인터를 ..
먼저 이것을 설명하기 전에 lvalue와 rvalue의 개념이 잡혀있어야 한다. C++에서의 모든 표현식은 lvalue 또는 rvalue이다. lvalue는 단일 식(해당 코드 라인)을 넘어 없어지지 않고 지속되는 객체. -> 주소가 존재하는 이름 있는 변수 (const타입 포함). -> 문자열 리터럴 상수의 경우에는 lvalue이다. 반면 rvalue의 경우에는 단일 식을 넘어 지속되지 않는 임시적인 객체. -> 임시 객체란 런타임에 잠깐 사용되는 객체로 -> 상수 또는 임시 객체는 rvalue라고 할 수 있다. -> 주소가 없는 객체,리터럴 상수, i++, i--등등 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 int main() { int x = 100; /..