본문 바로가기

언리얼_엔진_게임개발_공부/C++8

[shared_ptr] enable_shared_from_this / control block / aliasing constructor / make_shared 의 placement new shared_ptr 는 객체에 대한 소유권을 여러 곳에서 공유 가능하게 하며, 참조 카운트를 추적하여 0이 될 때 자동으로 메모리를 해제하는 스마트 포인터이다.왜 필요한가?- 클래스 내부에서 자기 자신에 대한 shared_ptr 를 생성해야 하는 경우- 특히 객체에 대한 소유권을 다른 곳에서 객체의 멤버 함수를 통해 공유하고자 하는 경우.- shared_ptr(this) 를 사용하면 별도의 참조 카운트를 가진 새로운 shared_ptr 를 생성하므로해당 객체를 관리하는 shared_ptr 가 여러 개가 되어 별도의 참조 카운트가 생기므로 중복으로 메모리 해제할 위험이 있다.이중 delete 위험이 있는 잘못된 예시#include class MyClass {public: std::shared_ptr .. 2025. 4. 27.
[C++] 람다 함수 lambda expression ~ accumulate() / transform() / partition() 등 STL 함수에 사용 예시 알고리즘 STL 의 함수 중 일부는 연산?을 매개 변수로 하여 인자를 전달 받아 실행된다.e.g. sort(first, last, predicate) 에서 predicate 은 정렬의 기준이 되는 boolean 반환 타입의 함수이다.이러한 STL 함수를 커스터마이즈 하기 위해 필요한 연산은 간단한 일회성인 경우가 많은데,이 연산을 개별적인 함수로 정의하는 것 대신에 필요한 위치에서 '익명'의 함수 객체로 정의하여 사용하는 방식이 '람다' 함수 이다. 여러 가지 표현 방식이 있는데, 그 중 가장 간단한 방식으로 살펴보고자 한다.(어차피 코드 가독성을 위해 간단한 연산 위주로 사용해야 한다.) 람다 표현식 / 람다식 / 람다 함수[capture](parameters) -> return_type { // op.. 2025. 1. 8.
[C++] 복사하기 - std::memcpy / std::copy, copy_if 1. memcpyvoid* memcpy(void* destination, const void* source, std::size_t count) std::memcpy - cppreference.comvoid* memcpy( void* dest, const void* src, std::size_t count ); Copies count bytes from the object pointed to by src to the object pointed to by dest. Both objects are reinterpreted as arrays of unsigned char. If the objects overlap, the behavior is undefien.cppreference.com - #include .. 2024. 12. 31.
[C++] <algorithm> search() / <string> find() search(start1, end1, start2, end2)[start1, end1)의 범위에서 [start2, end2) 시퀀스를 검색해 찾은 경우, 찾은 시퀀스의 첫번째 원소를 가리키는 반복자를 반환한다.찾지 못한 경우 v2.end() 를 반환한다.예) v1 = [1, 2, 3, 4, 5] 에서 v2 = [3, 4] 를 검색하면 반복자는 v1의 3을 가리키고 있다.int main() { vector v1 = { 1, 2, 3, 4, 5 }; vector v2 = { 3, 4 }; vector::iterator it = search(v1.begin(), v1.end(), v2.begin(), v2.end()); for (; it != v1.end(); it++) co.. 2024. 12. 30.
[C++] cin 에 대하여... >>, getline, cin.getline / cin.ignore 관련 이슈 / cin 플래그 값 (잡담)오늘 하루는 프로그래머스 코딩 연습문제 풀다가 다 갔다..... ㅠ"혼자 놀기의 달인" - 나를 힘들게 했던 문제... https://school.programmers.co.kr/learn/courses/30/lessons/131130 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr머릿속에서 코드를 단계별로 동작하는 게 오래 걸린다... 레벨 1인줄 알았는데 레벨 2였다;;결국 낮에 시작해서 저녁에 해결했는데, 마지막 두시간 정도 뻘짓하다가 내가 놓쳤던 것은...루프에서 최댓값 2개를 업데이트하고 있었는데 최댓값 갱신할 때 두번째 최댓값 업데이트를 안했던 것 ㅠ...... 멍청아~~~더 빠릿빠릿하.. 2024. 12. 27.
[C++] vector, map / sort, find / reverse iterator and base iterator 컨테이너= 자료 구조 Data Structures- 템플릿 구현으로 타입 관계 없이 사용 가능- 내부적으로 메모리 관리하므로 사용 시의 메모리 관리를 고려하지 않아도 됨- 반복자 iterator 로 traverse 가능 벡터- 삽입되는 원소 갯수에 따라 내부 배열 크기 자동 관리 / 생성자에서 초기 크기를 지정해도 원소 추가 삽입/삭제에 따라 내부적으로 메모리 관리- 삽입/삭제 맨 뒤에 하는 경우에 주로 사용- #include  + 벡터의 복사 방식을 알아보기 위해 아래와 같이 비교해보았다. vector vec1 = { 1,2,3,4,5 }; vector vec2(vec1); vector vec3 = vec1; cout vec2, vec3 은 vec1과 별개의 주소에 할당되어 vec.. 2024. 12. 24.