본문 바로가기

프로그래밍 언어38

스마트 포인터 스마트 포인터(smart pointer)는 객체를 소요하며, 스마트 포인터의 생명주기는 객체와 같거나 길어야 한다. scoped pointers stdlib에 있는 포인터가 아니다. boost/smart/scoped_ptr.hpp에 있다. scoped pointer는 어떤 스코프(scope)에서 다른 스코프로 옮겨질 수 없다.(non-transferable) 그리고 객체를 복사할 수 없으며(exclusive ownership), 다른 스마트 포인터가 스코프 포인터의 동적 객체의 소유권을 가질 수 없다. boost::scoped_ptr my_ptr{ new PointedToType }; 보통 다아나믹 객체를 new를 이용해 생성한 다음, 위처럼 생성자에게 넘겨 준다. unique pointer transf.. 2021. 9. 4.
C++ explicit implicit type conversion을 막아준다. #include class A { public: int num; A(int n) : num(n) {}; }; void printA(A a) { std::cout 2021. 8. 18.
C++ const_cast, static_cast, reinterpret_cast named conversion을 이용해 하나의 타입에서 다른 타입으로 명시적으로 형변환을 할 수 있다. 보통 implicit conversion을 사용하지 못할 때 쓴다. 대개 아래와 같은 형식을 취한다. named-conversion(object-to-cast) const_cast const 변수를 받아 const를 벗겨준다.(cast away) void carbon_thaw(const int& encased_solo) { //encased_solo++; // Compiler error; modifying const auto& hibernation_sick_solo = const_cast(encased_solo); hibernation_sick_solo++; } const_cast를 이용해 volati.. 2021. 8. 18.
C++ copy and move constructor, assignment 이 글에서는 C++의 copy semantic과 move sematic에 대해서 알아봅니다. 객체(object)를 복사(copy)하는 방법에는 copy constructor, copy assignment 두 가지 방법이 있다. 먼저 '복사'의 의미를 알아보자. 객체 x를 객체 y로 '복사'한다는 것은 두 객체가 동등(equivalent)하지만 독립적(independent)이라는 뜻이다. 즉, 복사 후에 x == y이지만, 객체 x에 대한 수정은 객체 y에 영향을 주지 않는다. 예를 들어, 객체를 함수의 인자에 값으로 넘겨줄 때(pass by value) 복사가 일어난다. #include int add_one_to(int x) { x++; return x; } int main() { auto origina.. 2021. 8. 18.
자바스크립트 비동기, Promise, async, await 웹 브라우저에서 동작하는 자바스크립트 프로그램은 어떤 동작을 하기 전에 사용자의 클릭을 기다리는 이벤트를 중심으로(event-driven) 동작한다. 네트워크를 통해 데이터를 전달 받거나 클릭과 같은 어떤 이벤트가 발생하기 전에 프로그램은 계산 과정을 멈추는 비동기(asynchronous)적으로 동작할 필요가 있다. 프로미스(Promise)는 ES6에서 도입되었으며, 비동기 연산의 미래의 결과를 나타내는 객체이다.(결과를 바로 사용할 수도 있고, 사용하지 못할 수 도 있다) async와 await은 ES2017에서 도입되었으며, Promise로 비동기를 구현하는 코드를 마치 동기(synchronous) 프로그램을 작성하는 것처럼 간단히 비동기 프로그램을 작성할 수 있도록 만들어 준다. asynchrono.. 2021. 8. 17.
자바스크립트 iterator, generator 반복가능한 객체(iterable object)와 반복자(iterator)는 ES6에서 도입되었다. 대표적으로 배열, 문자열, Set, Map은 iterable하다. let sum = 0; for(let i of [1,2,3]) { // Loop once for each of these values sum += i; } sum // => 6 iterator 동작 방식 for/of와 spread 연산자(...)는 iterable object와 동작한다. iterable object는 iterator를 반환하는 매소드를 가진 객체이다. iterator는 iteration result object를 반환하는 next() 매소드를 가진 객체이다. iteration result object는 프로퍼티로 value와.. 2021. 8. 16.
자바스크립트 JSON 직렬화와 파싱 프로그램이 데이터를 저장하거나, 네트워크를 통해 다른 프로그램으로 데이터를 전송할 때, 메모리에 있는 데이터 구조를 문자열로 바꿔 저장하거나 전송한 다음 이후에 사용할 때 원래의 메모리상에 있는 데이터 구조를 파싱해서 사용한다. 이렇게 데이터의 구조를 문자열이나 캐릭터의 스트림으로 바꾸는 것을 직렬화(serialization), marshaling, pickling이라 한다. let o = {s: "", n: 0, a: [true, false, null]}; let s = JSON.stringify(o); // s == '{"s":"","n":0,"a":[true,false,null]}' let copy = JSON.parse(s); // copy == {s: "", n: 0, a: [true, fals.. 2021. 8. 16.