C, C++ 18

[Modern C++] lvalue와 rvalue의 이해

rvalue로 바꾼다는 것은 임시 객체로 만든다는 것이다 rvalue는 그 객체의 포인터를 가로채도 문제가 없다 함수인자가 rvalue로 들어와도 내부에선 lvalue취급을 한다(변수로 받았으니까) Reference Collapsing Rule int& & : int&int& && : int&int&& && : int&&int&& & : int& templatevoid deduce(T&& t); 일 때, T가 int형 lvalue or rvalue일 때 다음 규칙이 적용된다 int& && : int&int&& && : int&& std::forward()는 템플리트 함수의 인수를 다른 함수의 인수에 그대로 전달하기 위한 것이다. 이것을 perfect forwarding이라고 한다.

C, C++ 2016.09.09

[스크랩][C, C++] C++의 람다 식

출처 : https://msdn.microsoft.com/ko-kr/library/dd293608.aspx C++의 람다 식Visual Studio 2015다른 버전C++11에서 람다 식(종종 람다라고 함)은 호출되었거나 인수로서 함수에 전달된 위치에서 바로 익명 함수 개체를 정의하는 편리한 방법입니다. 일반적으로 람다는 알고리즘이나 비동기 메서드에 전달되는 몇 줄의 코드를 캡슐화하는 데 사용됩니다. 이 문서에서는 람다가 무엇인지 정의하고 다른 프로그래밍 기법과 비교하고 그 장점을 설명하며 기본 예제를 제공합니다.람다 식의 부분ISO C++ 표준에서는 std::sort() 함수에 세 번째 인수로 전달되는 간단한 람다를 보여 줍니다.C++#include #include void abssort(float* ..

C, C++ 2016.01.30

[C, C++] More Effective C++ Item28 : Smart Pointer

스마트 포인터는 보통의 포인터처럼 생겼고 보통의 포인터처럼 동작하고 보통의 포인터처럼 느껴지지만 사실 엄청난 기능을 제공하도록 설계된 객체이다. 리소스 관리 등에 사용된다. 스마트 포인터를 쓰는 이유는 다음과 같다.생성과 소멸, 복사와 대입, 역참조 작업을 조절할 수 있기 때문이다. 스마트 포인터는 C++ 기본 제공 포인터처럼 타입이 명확해야 하기 때문에 템플릿 기반으로 만들어 진다.스마트 포인터를 생성하는 방법은 가리킬 객체를 스마트 포인터의 내부에 있는 더미 포인터로 가리키도록 하는 것이다. 1. 생성, 대입, 소멸스마트 포인터의 복사 생성자, 대입 연산자, 소멸자를 구현하는 방법은 소유권이라는 것 때문에 복잡하다. 스마트 포인터는 소멸될 때, 가리키던 객체를 삭제해야 한다. 하지만 이는 그 객체가 ..

C, C++ 2014.03.30

[C++][추후 추가해야 함] More Effective C++ Item 26 : 클래스 인스턴스의 개수를 의도대로 제한하는 방법

객체를 전혀 생성하지 않거나 단 한 개만 생성하는 방법특정한 클래스의 객체가 생성되지 않도록 막는 방법 중 하나는 생성자를 private으로 선언하는 것이다.class PrintJob;class Printer{public:friend Printer& thePrinter();private:Printer();Printer(const Printer& rhs);}; Printer& thePrinter(){static Printer p;return p;} 이렇게 하면 하나로 제약을 넣을 수 있다. 언제든지 thePrinter() 함수를 호출하면 된다.이 코드 설계에 필요한 키 포인트는 세 가지이다.- Printer클래스의 생성자가 private이다. : 다른 곳에서는 객체 생성 불가- thePrinter 함수가 ..

C, C++ 2014.03.16

[C++] More Effective C++ Item 25 : 생성자 함수와 비 멤버 함수를 가상 함수처럼 만드는 방법

More Effective C++ Item 25 생성자의 호출은 만들고자 하는 객체의 타입을 정확히 아는 상태에서만 가능하다.가상 생성자라는 것은 사실 뭔가 이상하다..생성자라는 것은 객체가 생성될 때 호출되야 하는 것인데 이걸 가상으로 한다는 건.. ㅎㅎ여기서 말하고 싶은 가상 생성자는 그런 일반의 생성자와는 거리가 좀 있다. 여기서 말하는 가상 생성자는 사실 '가상의 타입을 토대로 객체를 생성하는 함수'를 그렇게 부른 것이다.물론 객체를 생성하는 것이기 때문에 생성자처럼 동작해야 하는 것은 맞다. 그렇기 때문에 가상 생성자라고 부르는 것이다. 이 가상 생성자 중에 가장 많으 쓰이는 것이 바로 가상 복사 생성자이다.포인터가 실제로 가리키는 타입에 맞게 객체를 복사하고 싶다! 할 때 쓰인다.가상 복사 생..

C, C++ 2014.03.16
반응형