분류 전체보기
-
[C++] lambda 함수 기본부터카테고리 없음 2022. 11. 16. 14:25
In C++11 and later, a lambda expression—often called a lambda—is a convenient way of defining an anonymous function object (a closure) right at the location where it's invoked or passed as an argument to a function. MSDN-Lambda expressions in C++ 람다 함수는 기존 클로저(Closure)의 역할을 좀 더 쉽게 구현하게끔 하기 위하여 설계되었으며, C+11에서 처음 제시되었습니다. 여기서 클로저란 함수처럼 호출될 수 있는 이름 없는 객체를 일반적으로 일컫는 용어입니다. 클로저의 간단한 예시를 들어보자면, 더보기 st..
-
[C++] Reference 와 Pointer 의 차이점 설명해줄래뜯고 또 뜯어보는 컴퓨터/씨쁠쁠 C++ 2022. 11. 14. 15:10
안녕하세요. 요번 시간에는 Reference와 Pointer의 차이점에 대해서 적어보려고 합니다. 우선, 포인터(Pointer)와 레퍼런스(Reference) 둘 다, 변수에 대하여 값을 가리키거나 변수 자체에 접근하여 값을 변경할 수 있도록 하는 역할을 실시하게 됩니다. 하지만 포인터와 레퍼런스의 가장 근본적인 차이는 포인터의 경우, 포인터는 메모리가 저장되어 있는 곳을 가리키는 값을 저장하게 되고, 레퍼런스의 경우 값(변수)에 대한 별칭을 의미 하는데 있어 차이가 존재합니다. 위의 그림0 을 보게 되면, 포인터 p 는 변수 a의 주소 값을 담아두게 되고, 레퍼런스인 ref는 단지 a의 별칭일 뿐, a의 주소 값을 저장하지 않습니다. 그럼 각 차이점을 알아보도록 하겠습니다. 비 교 포인터(Pointer..
-
[c++] delete[] 가 포인터를 받아도 잘 동작하는 이유 2(associative array)카테고리 없음 2022. 11. 9. 16:44
https://guru.tistory.com/133 [c++] delete[] 가 포인터를 받아도 잘 동작하는 이유(over-allocate) c++에서는 동적으로 객체를 생성 및 삭제를 시켜줄 때, new 그리고 delete 키워드를 쓰게 됩니다. 이때, new는 우리가 메모리를 할당하고, 생성자를 호출하게 되어, 그 사이즈나 크기를 명시해주게 됩 guru.tistory.com 이어, delete []를 사용했을 때, 사용되는 테크닉 "associative array"에 대해서 알아보겠습니다. 잠깐 정리하자면, delete[] 를 사용했을때, 얼마나 많은 소멸자를 호출해야 하는지 알 수 있게 하는 테크닉 중 하나인 "over-allocation"을 통해서 잠시나마 살펴보았습니다. 하지만 컴파일러는 as..
-
[c++] delete[] 가 포인터를 받아도 잘 동작하는 이유(over-allocate)뜯고 또 뜯어보는 컴퓨터/씨쁠쁠 C++ 2022. 11. 9. 16:23
c++에서는 동적으로 객체를 생성 및 삭제를 시켜줄 때, new 그리고 delete 키워드를 쓰게 됩니다. 이때, new는 우리가 메모리를 할당하고, 생성자를 호출하게 되어, 그 사이즈나 크기를 명시해주게 됩니다. 그렇지만 delete는 포인터만 넘겨줄 뿐인데, 어떻게 그 사이즈를 예측하고 삭제시켜 줄 수 있을까? 부연하자면, 밑과 같은 코드가 존재했을때, pFoo는 단순 포인터일 뿐인데, 어떻게 Foo array에 해당하는 메모리를 삭제시키고 알맞는 개수의 소멸자를 호출할 수 있을까요? class Foo { public: Foo() {} ~Foo() {} int mNunber; } int main() { Foo* pFoo = new Foo[10]; delete[] pFoo; } 메모리 할당에 해당 2가..
-
[c++] 너 .. 혹시 생성자에서 가상함수 호출할거야 ?뜯고 또 뜯어보는 컴퓨터/씨쁠쁠 C++ 2022. 11. 9. 00:54
네.. 제목을 좀 재밌게 지어보려고 했는데, 의도된 대로 지어졌는지 모르겠습니다. ㅎㅎ 아무튼 오늘 글을 쓰려고 한 주제는 생성자에서 가상 함수 호출을 하면 어떻게 되는가? 가 주제였습니다. 결론부터 말하자면, "제발 하지 마"입니다..! 뭐가 문제일까? 가상 함수를 생성자에서 호출하기 전에, "뭐가 문제일까?" 하는 생각이 드실 수 도 있습니다. 다음 함수를 보고 결과를 맞추신다면 이 글을 읽으실 필요는 없으실 거 같습니다. 그럼 문제입니다. 다음 코드를 보시고 어떤 결과가 나올지 예측해 주세요! #include class A { public: A() { fn(); } virtual void fn() { _n = 1; } int getn() { return _n; } protected: int _n; ..
-
[c++] New 그리고 malloc( ) 구분할 수 있어?뜯고 또 뜯어보는 컴퓨터/씨쁠쁠 C++ 2022. 11. 8. 12:41
c++에서 메모리를 할당하려면, new 키워드로 메모리를 할당하고, 메모리를 해제하려면 delete 키워드로 메모리를 해제해줍니다. 마치 c 언어에서 malloc( )과 free( )를 사용하는 것처럼 비슷하게 사용합니다. 하지만 C++에서는 new와 delete의 작동법은 조금 다르게 작동하는데 이에 대해 알아보겠습니다. 0. new 그리고 delete 사용법 우선 new와 delete는 연산자의 일종입니다. (malloc( )과 free( )는 함수의 일종입니다.) 따라서, new 연산자는 operator new( )라는 특별한 연산자 함수를 호출하며, delete 또한 마찬가지로 operator delete라는 특별한 연산자 함수를 호출하게 됩니다. 우선 다음과 같이 new 연산자를 사용할 수 있는..
-
[객체의 관계] Is-A 그리고 Has-A 관계 !뜯고 또 뜯어보는 컴퓨터/씨쁠쁠 C++ 2022. 11. 8. 02:03
프로그래밍을 하다 보면, 서로 다른 클래스가 공통적인 속성을 가지거나, 최소 두 클래스가 관련이 되어있는 경우가 존재합니다. 이때, 객체의 관계를 표현할 수 있는데, 대표적으로 Is-a 관계 그리고 Has-a 관계가 있습니다. Is-a 그리고 Has-a 관계 그게 뭔데? Has-a 관계 Composition 또는 Aggregation 관계라고도 부르는 has-a 관계는 "A는 B를 가진다" 또는 "A가 B를 가지고 있다"라고 정의할 수 있습니다. 한 객체가 다른 객체의 일부가 되는 것입니다. Has-a 관계는 비행기의 엔진을 예로 들 수 있는데, 비행기에는 엔진이 존재하며, 엔진을 포함하고 있다 또는 비행기는 엔진이 있다라고 표현할 수 있습니다. 이를 코드로 표현하면, 비행기라는 객체는 엔진 컴포넌트를 ..
-
[c++] 상속을 어떻게 멈출 수 있을까 ?뜯고 또 뜯어보는 컴퓨터/씨쁠쁠 C++ 2022. 11. 6. 00:24
질문. 마침 이런 생각을 할 수 있겠다. 상속되는 자식 객체에게 더 이상의 자식 객체를 만드는 것을 허락하지 않을 수 있을까? 이번 글에서는 이러한 객체를 만드는 디자인적인 방법론과 C++에서 제시하는 방법에 대해 알아보겠습니다. 정답 공개 더보기 1. Final 키워드를 사용한다. 2. Constructor를 private으로 사용한 다음, static 함수를 사용하여, 객체를 얻어온다. 3. private 생성자를 가진 dummy class를 활용하여, friend 키워드 활용하기. 1. final keyword 사용 c++ class 객체에서 final 키워드를 사용하게 된다면, 더 이상 클래스를 상속하는 것을 허락하지 않습니다. 따라서 어떠한 클래스도 final 클래스를 사용한 객체에 대해 상속받..