[C++] 스마트 포인터
·
C++/Basic
auto_ptr#include auto_ptr ap(new double);*ap = 25.5;- memory헤더 파일을 소스코드에 포함해야한다.- 메모리가 해제될 때 ap를 해제하고 ap의 파괴자가 동적메모리를 해제한다.- new로 생성한 단일 객체에 대해서만 메모리의 해제를 보장한다.- 동일한 메모리 위치를 가리키는 객체를 2개 이상 생성하지 않아야 한다는 점입니다.- C++11이 지원되는 환경이라면 auto_ptr을 완전히 대체하는 unique_ptr을 사용하면 됩니다. auto_ptr ap(new double);auto_ptr ap2;*ap = 25.5;ap2 = ap;cout - 다음과 같을 때 ap는 ap2에 소유권을 넘기게된다. 더 안전하다고 할 수 있다. unique_ptrunique_ptr..
우측값(rvalue)에 대하여
·
C++/Effective Modern
C++에서는 rvalue 참조(&&)와 이동연산자(move constructor 및 move assignment operator)를 통해 효율적인 메모리 관리를 할 수 있습니다. 이 글에서는 이러한 개념들을 자세히 설명하고, 이를 통해 성능 최적화 방법을 이해할 수 있도록 하겠습니다.rvalue 참조 (&&)rvalue 참조는 C++11에서 도입된 기능으로, 주로 이동생성자(move constructor)와 이동할당 연산자(move assignment operator)를 구현하는 데 사용됩니다.lvalue와 rvaluelvalue는 식별 가능한 위치를 가지는 값입니다. 예를 들어, 변수는 lvalue입니다.rvalue는 임시 값으로, 식별 가능한 위치를 가지지 않는 값입니다. 예를 들어, 리터럴이나 연산..
[C++] 가상함수에 대해
·
C++/Basic
가상함수에 대해서- 가상 함수는 기본 클래스에서 선언된 함수로, 파생클래스에서 이 함수를 재정의(override)할 수 있게 합니다. 어떨 때 쓰이는가?- 다형성을 구현하기 위해 사용되며, 포인터나 참조를 통해 기본 클래스 형식으로 호출된 함수가 실제 객체의 타입에 따라 적절한 파생 클래스의 함수를 호출할 수 있게 합니다. 가상 함수의 기본 구문- 가상 함수를 선언하려면 기본 클래스에서 함수 선언 앞에 'virtual' 키워드를 사용합니다.- 파생 클래스에서 동일한 함수 시그니처로 함수를 재정의하면, 이 함수는 가상 함수로 동작합니다.class Base {public: virtual void show() { std::cout  동작 원리가상 함수 테이블- 가상 함수는 가상함수 테이블을 ..
초기화
·
C++/Effective Modern
auto auto의 장점 : 변수 초기화 누락을 방지하고 장황한 변수 선언을 피하는 것 중괄호 초기화 의도와는 달리 함수를 선언하게 된 경험이 있다면 바로 이 부작용에 당한 것이다. 문제의 근원은 이렇다. 다음은 흔히 인수를 지정해서 생성자를 호출 하는 코드의 예이다. Widget w1(10); // 인수 10으로 Widget의 생성자를 호출 그런데 이와 거의 비슷한 구문을 이용해서 인수 없이 Widget 의 생성자 class Widget { public: Widget(); // 기본 생성자 Widget(std::initializer_list il); // std::initializer // _list 생성자 … // 암묵적 변환 }; // 함수 없음 Widget w1; // 기본 생성자를 호출 Widg..
[C++] 형식 연역 규칙
·
C++/Effective Modern
템플릿 형식 연역 규칙 template void f(ParamType param); f(expression); - 컴파일러는 expression변수를 이용하여 두 가지 형식을 연역한다. T에 대한 형식, ParamType에 대한 형식이다. 두 형식이 다를 때가 있다. ParamType이 포인터 또는 참조 형식이지만 보편 참조는 아닐 때 template void f(T& param); int x = 3;//x는 int const int cx = x;//cx는 const int const int& rx = x;//rx는 const int인 x에 대한 참조 f(x);//T는 int, param의 형식은 int&가 된다. f(cx);//T는 const int, param의 형식은 const int& f(rx);..
함수 오버로딩
·
C++/Basic
함수오버로딩 매개변수의 내용이 다르고 이름이 같은 함수들을 만들 수 있게 해주는 기능 //가능 void hi(int x, int y) { ... } void hi(double x, double y) { ... } 1. 매개변수의 내용이 다른 같은 이름의 여러 함수를 만든다. //가능하지 않음 void hi(int x, int y) { ... } void hi(double x, double y) { ... }//void double hi(double x, double y) { ... }//double 2. 매개변수의 내용이 같고 반환타입이 다른 여러함수는 안 된다. //모호함 void hi(float x) { ... } void hi(unsigned int x) { ... } hi(2.142332);//모..