C++ - DO-WHILE에 의한 매크로 트랩핑

출처 #ifdef _DEBUG #define DEBUG_LOG(exp, ...) do {if (!(exp)){std::printf(__VA_ARGS__);}} while(0) #else #define DEBUG_LOG(exp, ...) do {(void)(exp);} while(0) #endif int main() { int x = 99; DEBUG_LOG(x > 100,"warning! x = %d", x); // x가 100 이하라면 경고를 표시 return 0;...
더 읽기

C++ - 문자열을 수치로 변환하는 방법

atoi #include <cstdlib> #include <iostream> #include <string> #include <typeinfo> int main() { const std::string str("123"); auto num = std::atoi(str.c_str()); std::cout << typeid(num).name() << " : " << num << std::endl; } strtol #include <cstdlib> #include <iostream> #include <string> #include <typeinfo>...
더 읽기

C++ - 표준 attribute 정리

원문 attribute(속성) 라는 것은 attribute(속성)는 컴파일러에 추가 정보를 전달하는 구문으로 [[attributes]] 이라고 쓴다. 최적화나 경고 추가나 제어 등을 할 수 있다. C++11 noreturn 속성 함수 함수가 결코 반환 하지 않는 것을 표시하는 속성 예외 송출이나 std::exit, std::abort 의 랩퍼 함수에...
더 읽기

C++ - 간단한 Object 메모리 풀링

의사 코드 class Player { Player(const int index) {} }; class UserManager { public: void NewUser(); void DeleteUser(const int playerIndex); private: list<shared_ptr<Player>> m_PlayerList; // 실제 사용 중인 플레이어들 vector<shared_ptr<Player>> m_PlyerPool; // Player 객체 pool deque<int> m_EmptyPoolIndex; }; void UserManager::Init(const int...
더 읽기

C++ - shared_from_this가 가리키는 곳을 변경하지 못하도록 규정

출처 this 포인터를 std::shared_ptr로 얻을 수 있는 기능으로 std::enable_shared_from_this 기본 클래스와 멤버 함수 shared_from_this()가 있다. std::enable_shared_from_this에서 파생된 클래스의 개체를 new 하고 shared_ptr의 생성자에 전달하면 이 개체의 this를 shared_ptr로 취득 할 수 있다. 그러나 아래와 같은 포인터에서 복수의 shared_ptr 개체를 만든...
더 읽기