C++ - NEW 구현

출처 new는 인수로 사이즈를 받지만 표준 new는 size가 0에서도 올바르게 동작하는 것을 규격으로 정하고 있다. 직접 구현 할 때에 의식하면 약간으로 규격에 준한 코드가 되어서 좋다. void* operator new(std::size_t size) { if (size == 0) { size = 1; }...
더 읽기

C++ - Argument Dependent Lookup

출처 C++ 언어가 가진 화려한 기구의 하나로 ADL(Argument Dependent Lookup)라는 것이 있다. 번역하면 “실 매개 변수 의존 이름 검색”으로 읽고, 글씨처럼 “실 매개 변수”에 의존하는 “이름 검색”이 된다. ADL의 동작 코드를 보면서 차례로 이해해 보자. int main() { func(); return...
더 읽기

C++ - 배열 참조

출처 배열 참조는 배열보다 안전한 속도 면에서 유리하다 !!! int *a[1]; // (1) int (*a)[1]; // (2) int &a[1]; // (3) int (&a)[1]; // (4) 이 4개의 차이점은 ? (1)은 모두 알다시피 int의 포인터의 배열이다. (2) int 배열의 포인터이다. (3)은...
더 읽기

C++ - ref-qualifier 유무로 오버로드 할 수는 없다

출처 C++11에는 implicit object parameter(*this를 참조하는 객체)를 lvalue 참조로 받거나 rvalue 참조로 받는지를 지정하는 기능이 있다. 이를 참고 참고 수식자(ref-qualifier)라고 한다. struct S { // void S::f(void) & void f() & ; // void S::f(void) && void f() && ;...
더 읽기

C++ - Virtual 전파

이 Box 클래스를 public 계승해도 안전할까? class Box : public Object { public: Box(); ~Box(); }; 정답은…이 정보만으로는 뭐라고 말할 수 없다 이다. 얼핏 보면 안 되다고 느끼는 사람도 많을 걸로 생각한다.특히 c++를 좀 알게 되었을 때의 사람은 우선 소멸자에...
더 읽기