⭐ Programming/Effective C++
[C++] Effective C++ : Chapter 8 new와 delete를 내 맘대로
[C++] Effective C++ : Chapter 8 new와 delete를 내 맘대로
2024.06.05목차 Chapter 8 new와 delete를 내 맘대로 항목49: new 처리자의 동작 원리를 제대로 이해하자 Q. new operator, delete operator를 클래스 내부 연산자로 오버로딩했습니다! main()의 결과로 옳은 답은 몇번일까요?class Unseen{public: Unseen() { cout 1번.Unseen()Unseen new! 8Unseen delete!~Unseen()2번.Unseen new! 8Unseen()~Unseen()Unseen delete!3번.Unseen new! 4Unseen()~Unseen()Unseen delete! 더보기답: 2번해제를 할 때에도 마찬가지로, 먼저 메모리를 해제한 후 소멸자를 호출해준다매크로로 만들어주는 것도 방법인데..
[C++] Effective C++ : Chapter 7 템플릿과 일반화 프로그래밍
[C++] Effective C++ : Chapter 7 템플릿과 일반화 프로그래밍
2024.05.27목차 Chapter 7 템플릿과 일반화 프로그래밍 항목 41: 템플릿 프로그래밍의 천릿길도 암시적 인터페이스와 컴파일 타임 다형성부터 Q. 다음 문장 중 틀린 것을 고르시오.1. 클래스 및 템플릿은 모두 인터페이스와 다형성을 지원한다.2. 클래스의 경우, 인터페이스는 명시적이며 함수의 시그너처를 중심으로 구성되어 있다.3. 다형성은 프로그램 실행 중에 가상 함수를 통해 나타난다.4. 인스턴스화를 진행하는 함수 템플릿에 어떤 템플릿 매개변수가 들어가느냐에 따라 호출되는 함수가 달라지는데 이를 컴파일 타임 다형성이라고 한다.5. 암시적 인터페이스는 함수 시그너처에 기반하고 있지 않다.6. 템플릿 매개변수의 경우, 인터페이스는 명시적이며 유효 표현식에 기반을 두어 구성됩니다.7. 컴파일..
[C++] Effective C++ : Chapter 6 상속, 그리고 객체 지향 설계
[C++] Effective C++ : Chapter 6 상속, 그리고 객체 지향 설계
2024.05.07목차 Chapter 6 상속, 그리고 객체 지향 설계 항목 32: public 상속 모형은 반드시 "is-a(..는 ...의 일종이다)"를 따르도록 만들자 Q. 다음 보기의 설명 중에 틀린 것을 고르십시오. 클래스 D("Derived)를 클래스 B("Base")로부터 public 상속을 통해 파생시켰다고 가정합니다.1. public 상속은 "is-a(..는 ...의 일종이다)"를 의미한다.2. D 타입으로 만들어진 모든 객체는 또한 B 타입의 객체이지만, 그 반대는 되지 않는다.3. D 클래스는 B 클래스보다 더 큰 메모리 공간을 가진다.4. private으로 상속받으면 public와 protected를 private 멤버로 바꿔준다.더보기답. 3번자식 클래스는 부모 클래스에서 상속받은 ..
[C++] Effective C++ : Chapter 5 구현
[C++] Effective C++ : Chapter 5 구현
2024.04.28Effective C++ : Chapter 5 구현 항목 26: 변수 정의를 늦출 수 있는 데까지 늦추는 근성을 발휘하자. Q. 아래 코드에서 encrypted 변수를 어떻게 초기화하고 있을까요? 아래의 보기 중 옳은 것을 고르시오.std::string encryptPassword(const std::string& password){ std::string encrypted(password); }1. string의 기본 생성자에 의해 만들어지고 password 값이 대입된다.2. string의 복사 생성자에 의해 초기화된다.더보기답: 2번 ( 185~186쪽 )불필요한 기본 생성자 호출이 일어나지 않고 변수의 의미가 명확한 상황에서 변수를 정의함과 동시에 복사 생성자에 의해 초기화가 이루어지고 있..
[C++] Effective C++ : Chapter 4 설계 및 선언
[C++] Effective C++ : Chapter 4 설계 및 선언
2024.04.17Effective C++ : Chapter 4 설계 및 선언 항목 18: 인터페이스 설계는 제대로 쓰기엔 쉽게, 엉터리로 쓰기엔 어렵게 하자 Q. 인터페이스에 대해 설명해보세요.더보기소프트웨어식 인터페이스: 응용프로그램과 운영체제 간의 통신을 연결해주는 인터페이스언어적인 인터페이스:순수 가상함수로만 이루어진 클래스 Q. 인터페이스를 설계할 때, shared_ptr 을 사용하면 좋은 이유에 대해 설명해보세.더보기사용자 정의 삭제자를 통해 교차 DLL 문제 예방할 수 있습니다.반환 타입을 포인터가 아닌 shared_ptr로 만들어서, 메모리 누수 예방할 수 있습니다. Q. 교차 DLL 문제(cross-DLL problem)에 대해 설명해보세요. 왜 교차 DLL 문제가 발생할까요? 이에 대한 해결방안으로..
[C++] Effective C++ : Chapter 3 자원관리
[C++] Effective C++ : Chapter 3 자원관리
2024.04.13프로그래밍에서 자원(Resource)이란, 사용 후에 시스템에 돌려주는 모든 것을 통칭한다. C++ 프로그래밍에서는 동적으로 할당한 메모리는 메모리 누수가 발생하지 않도록 적절히 해제해주어야 한다. 목차 Effective C++ : Chapter 3 자원관리 항목 13: 자원 관리에는 객체가 그만! Q. 아래 코드를 사용하면 어떤 상황이 벌어질까요?shared_ptr spi(new int[1024]); 컴파일도 잘 된다. 동적 배열에 대한 메모리가 문제없이 잘 해제된다.컴파일 에러가 발생한다. 메모리가 해제되지 않는다.컴파일 에러가 발생하지 않는다. 메모리가 해제되지 않는다.더보기shared_ptr 는 소멸자 내부에서 delete[] 연산자가 아니라 delete 연산자를 사용하므로 동적으로 할..
[C++] Effective C++ : Chapter 2 생성자, 소멸자 및 대입 연산자
[C++] Effective C++ : Chapter 2 생성자, 소멸자 및 대입 연산자
2024.04.10목차 Chapter 2: 생성자, 소멸자 및 대입 연산자 항목 5: C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자 Q. C++이 만들어내는 기본적인 함수는 무엇이고, 어떠한 형태로 생성할까요? 프로그래머기 만들지 않으면 컴파일러가 기본으로 생성해주는 멤버 함수가 뭐가 있을까요?더보기A. 기본적인 함수는 복사 생성자, 복사 대입 연산자, 소멸자입니다. 생성자조차도 선언되어 있지 않으면 역시 컴파일러가 기본 생성자를 선언합니다. 이 4가지 함수는 inline 함수 형태로 생성됩니다.추가로 이동 생성자, 이동 대입 연산자도 생성됩니다public - inline 은 컴파일러가 선택한다.move&&… (가변길이 템플릿)코드복사형태https://modoocode.com/290" data..
[C++] Effective C++ : Chapter 1 C++에 왔으면 C++의 법을 따릅시다
[C++] Effective C++ : Chapter 1 C++에 왔으면 C++의 법을 따릅시다
2024.04.07목차 Chapter 1: C++에 왔으면 C++의 법을 따릅시다 항목 1: C++ 언어들의 연합체로 바라보는 안목은 필수 포인터는 메모리의 스택 영역에 있고 포인터가 가리키는 객체는 힙에 있다! 항목 2: #define을 쓰려거든 const, enum, inline을 떠올리자 Q. #define 매크로의 유효 범위는?더보기A. 컴파일이 끝날 때까지다. 항목 3: 낌새만 보이면 const를 들이대 보자! Q. 아래의 코드에서 값을 변경하지 못하도록 const를 붙이고 싶습니다. 어디에다가 const를 붙이는게 좋을까요?char* authorName = "Scott Meyers"; 더보기A. 값이 변경되지 않도록 앞쪽에 const를 붙이면 된다. 하지만 주소값도 변경되지 않게 con..