객체 생성 및 소멸 과정 중, 절대로 가상 함수를 호출하지 말자 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 class Transaction { public: Transaction() { logTransaction(); } virtual void logTransaction() const=0; }; class butTransaction: public Transaction { public: butTransaction(){}; virtual void logTransaction() const; }; void mian() { BuyTransaction b; } Colored by Color Scripter cs 상속 관계에서 생성자에 쓰이는 virtual ..
예외가 소멸자를 떠나지 못하도록 붙들어 놓자 소멸자로 부터 예외가 발생 하는 경우를 C++ 언어에서 막는 것은 아니지만, 실제 상황을 들춰보면 확실히 우리가 막을 수밖에 없다. 예제 1 1 2 3 4 5 6 7 8 9 10 11 12 13 class Widget { public: Widget(); ~Widget() {….} }; void main() { std::vector v; } cs 1. vector 타입의 객체가 v 일 경우 객체를 소멸시킬 책임은 바로 벡터에게 있다. 2. 10개의 객체 v가 vector에 있을 경우 첫 번째 객체가 소멸할 때 예외가 생기고 두 번째 객체가 또 예외가 생길 경우 C++입장에서는 감당하기 힘들다. 3. 위 2번의 일 경우 예외가 동시에 발생한 조건에 따라 프로그램 ..
다형성을 가진 기본 클래스에서는 반드시 가상 소멸자를 선언하자C++에서는 다형성을 가진 기본 클래스의 경우, 소멸자를 반드시 가상 소멸자로 선언해야 합니다. 그렇지 않으면, 기본 클래스 포인터를 통해 파생 클래스 객체를 삭제할 때 파생 클래스의 소멸자가 호출되지 않아 메모리 누수나 불완전한 소멸 문제가 발생할 수 있습니다.기본 클래스의 비가상 소멸자를 사용할 경우, C++ 표준에 따르면 기본 클래스 포인터를 통해 파생 클래스 객체를 삭제하는 것은 미정의 동작이 됩니다.예제 1: 비가상 소멸자의 문제점class TimeKeeper{public: TimeKeeper(); ~TimeKeeper(); // 비가상 소멸자};int main(){ TimeKeeper* ptk = getTimeKeep..
컴파일러가 자동으로 생성하는 함수를 불필요할 때 명시적으로 금지하자클래스를 사용할 때, 때로는 복사 생성자와 복사 대입 연산자의 사용을 금지하고 싶을 때가 있습니다. 그렇다고 해서 우리가 이를 구현하지 않았다고 해서 자동으로 금지되는 것이 아니라, 컴파일러가 자동으로 생성해버립니다. 이를 방지하는 방법은 명확히 복사 생성자와 복사 대입 연산자의 사용을 금지하는 것입니다.문제 상황class CA{ // 아무 것도 구현하지 않음};int main(){ CA ca; CA ca2; CA ca3(ca); // 복사 생성자 호출 ca2 = ca; // 복사 대입 연산자 호출}위의 예제에서 CA 클래스는 복사 생성자와 복사 대입 연산자가 명시적으로 정의되지 않았습니다. 그럼에도 불구하고..
C++이 자동으로 생성하고 호출하는 함수들에 주의하자class Empty { };class Empty {public: Empty() { /* ... */ } // 기본 생성자 Empty(const Empty& rhs) { /* ... */ } // 복사 생성자 ~Empty() { /* ... */ } // 소멸자 Empty& operator=(const Empty& rhs) { /* ... */ } // 복사 대입 연산자};C++에서는 프로그래머가 명시적으로 선언하지 않아도 컴파일러가 자동으로 생성해주는 멤버 함수들이 있..
- Total
- Today
- Yesterday
- C# 고급 기술
- PowerShell
- 서귀포
- 제주도
- Build
- Effective c++
- Windows
- 서귀포블루버블
- 스쿠버다이빙
- 패턴
- 성산블루버블
- effective
- C#.NET
- 블루버블
- OpenSource
- 현포다이브
- 블루버블다이빙팀
- C++
- 암호화
- 외돌개
- 네트워크 정보
- 울릉도
- C#
- 스쿠버 다이빙
- 블루버블다이브팀
- CMake
- script
- DLL
- Linux
- C
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |