C++
C++ 포인터 객체 자살 (delete this)
delete this는 소멸자에 해선 안되고 또한 매우 안좋은 코딩 스타일이다. 사용하고자 하면 몇가지 주의 사항이 있다. new로만 인스턴스화가 되있어야 한다 (new[] X), 다른 포인터를 가리킨다던가, 레퍼런스를 가리켜서는 안된다. 맨 마지막 구문이여야 한다. 멤버 변수 변경 또는 함수 호출해선 안된다. this 오브젝트를 해제 후 건드려선 안된다, 역참조, -> 참조, 비교 등. class A { public: void fun() { delete this; } }; int main() { /* 실행 가능 */ A *ptr = new A; ptr->fun(); ptr = NULL; /* 에러 : Undefined Behavior */ A a; a.fun(); getchar(); return 0; ..
[Unreal] 사용자 정의 컴포넌트 (UActorComponent)
생성 방법은 간단하다, C++ 클래스 생성 > Actor Component를 선택한다. 아래와 같이 함수들이 기본으로 설정될텐데 처음 보는 것들이다. 엑터일 시 PrimaryActorTick.bCanEverTick = true; 이지만 엑터 컴포넌트 일땐 PrimaryComponentTick.bCanEverTick = true; 이다. BeginPlay 함수는 동일하다 Tick 함수 대신 TickComponent 함수이다. 사용 조건은 간단한데 다른 컴포넌트가 들어가면 안된다 즉 데이터 들고있는 용도 또는 오버라이딩을 하여 여러군데에 같은 함수를 선언하는걸 방지용으로만 생각하면 된다. HP Comp에서 저런 형태가 나오는게 정상이다 만약에 헤더파일에 다른 기타 컴포넌트를 선언할 시 BeginPlay 함수..
C++ 정적 바인딩과 동적 바인딩의 차이점
바인딩은 일반적으로 한 항목을 다른 항목에 매핑하는 것을 나타낸다. 컴파일된 언어의 컨텍스트에서 바인딩은 함수 호출과 함수 정의 간의 연결이다. C++에서 함수가 호출되면 프로그램 컨트롤은 해당 함수가 정의된 메모리 주소에 바인딩된다. C++에는 정적(또는 초기) 바인딩과 동적(또는 후기) 바인딩의 두 가지 유형의 바인딩이 있다. 이 게시물은 C++의 정적 바인딩과 동적 바인딩의 차이점에 대한 개요를 제공한다. 정적 바인딩은 컴파일 타임에 발생하고 동적 바인딩은 런타임에 발생한다. 따라서 각각 조기 및 후기 바인딩이라고도 한다. 정적 바인딩에서는 함수 정의와 함수 호출이 컴파일 시간에 연결되지만 동적 바인딩에서는 런타임까지 함수 호출이 해결되지 않으므로 런타임까지 바인딩되지 않는다. 정적 바인딩은 함수를..
C++ 중괄호 초기화
특히 비교적 간단한 생성자에 대한 class생성자를 항상 정의할 필요는 없다. 사용자는 다음 예제와 같이 균일한 class 초기화를 사용하여 개체를 초기화하거나 struct 초기화할 수 있다. // no_constructor.cpp // Compile with: cl /EHsc no_constructor.cpp #include // No constructor struct TempData { int StationId; time_t timeSet; double current; double maxTemp; double minTemp; }; // Has a constructor struct TempData2 { TempData2(double minimum, double maximum, double cur, in..
C++ 동기(synchronous)와 비동기(asynchronous) / 블로킹(blocking)과 논블로킹(non-blocking)
1. 동기(Synchronous)와 비동기(Asynchronous) 개념 동기는 요청과 그 결과가 동시에 일어난다 비동기는 요청과 그 결과가 동시에 일어나지 않는다 1) 동기의 예 일반적으로 사용하는 함수들은 대부분 동기적 방식이다. C언어의 scanf()와 Java의 Scanner 객체의 next()메서드 같이 사용자의 입력을 받는 함수들이 그 예이다. Scanner sc = new Scanner(System.in); int num = sc.nextInt(); sc.nextInt() 결과 사용자가 입력을 하면, 그 값은 num이라는 변수에 담긴다. 즉, nextInt() 메서드를 호출하고 그 결과를 자신이 직접 처리 했다. 2) 비동기의 예 다음은 JS의 setTimeout() 함수이며, 비동기 방식의..
[Unreal] C++ 인터페이스 (UInterface)
생성 방법은 우클릭 후 > New C++ Class > Unreal Interface 언리얼에선 모든 오브젝트들은 인스턴스화가 되어야 되기 때문에 인터페이스가 단순한 가상함수 (순수 가상 함수 X)이다. 원형은 아래와 같다. UWeaponInterface는 그대로 놔둔다, 리플렉션 전용이기에 절대로 지워서는 안된다. 아래에 있는 I로 시작되는 IWeaponInterface에 구현부를 넣는다. 헤더파일 #pragma once #include "CoreMinimal.h" #include "UObject/Interface.h" #include "WeaponInterface.generated.h" // This class does not need to be modified. UINTERFACE(MinimalAP..
문자열 (소문자 대문자 변환) transform 함수
algorithm 헤더파일 내에 있다 toupper (대문자), tolower(소문자) 그리고 :: 익명 네임스페이스 무조건 붙여야한다. #include #include #include using namespace std; int main() { string str1, str2; cin >> str1 >> str2; transform(str1.begin(), str1.end(), str1.begin(), ::toupper); transform(str2.begin(), str2.end(), str2.begin(), ::tolower); cout
C++ stringstream 사용법 (문자열에서 공백 제외 추출, 특정값)
1) 문자열을 나누는 stringstream C++에서 stringstream은 주어진 문자열에서 필요한 자료형에 맞는 정보를 꺼낼 때 유용하게 사용된다. stringstream에서 공백과 '\n'을 제외하고 문자열에서 맞는 자료형의 정보를 빼낸다. ˙ #include 전처리 헤더를 필수로 포함해야 한다. ˙ stream.str(string str) 은 현재 stream의 값을 문자열 str로 바꾼다. int num; string str = "123 456"; stringstream stream; stream.str(str); while(stream1 >> num ) cout num ) cout
C++ max_element(), min_element() 최대값, 최소값
C++에서는 이 기능을 #include 에서 제공한다. max_element()나 min_element()는 둘다 모든 요소에 접근을 해야 하기 때문에, 모든 STL 컨테이너에 대해서 선형으로 동작한다. 즉 시간 복잡도가 O(n)이다. template ForwardIterator max_element (ForwardIterator first, ForwardIterator last); template ForwardIterator max_element (ForwardIterator first, ForwardIterator last, Compare comp); template ForwardIterator min_element (ForwardIterator first, ForwardIterator last); ..
64bit OS에서 C++과 C# 데이터 차이 비교
CTS C++ C# Size(byte) System.Byte unsigned char byte 1 System.SByte signed char sbyte 1 System.Int16 short short 2 System.UInt16 unsigned short ushort 2 System.Int32 int int 4 System.Int64 long, long long long 8 System.Single float float 4 System.Char wchar_t char 2 System.Double double double 8 System.UInt64 size_t ulong 8 System.IntPtr void * (pointer) IntPtr 8 출처 : https://dragontory.tistory...