C++ 클래스를 사용 하다보면, 컴파일러가 은근슬쩍 만들어내는 함수가 4가지가 있다.
- 기본 생성자
- 복사 생성자
- 대입 연산자
- 소멸자
- class NonCopyable
- {
- private:
- NonCopyable(const NonCopyable&);
- };
- int main()
- {
- // Compile error : C2512: 'NonCopyable' : 사용할 수 있는 적절한 기본 생성자가 없습니다.
- NonCopyable nc;
- }
- class NonCopyable
- {
- public:
- NonCopyable() {}
- private:
- NonCopyable(const NonCopyable&);
- };
- int main()
- {
- NonCopyable nc;
- }
- class NonCopyable
- {
- public:
- NonCopyable() = default;
- private:
- NonCopyable(const NonCopyable&);
- };
- int main()
- {
- NonCopyable nc;
- }
- class NonCopyable
- {
- public:
- NonCopyable() {}
- ~NonCopyable() {}
- private:
- NonCopyable(const NonCopyable&);
- NonCopyable& operator = (const NonCopyable&);
- };
- class NonCopyable
- {
- public:
- NonCopyable() {}
- ~NonCopyable() {}
- // 명시적으로 복사 생성자 / 대입 연산자가 disable 처리 되었음
- NonCopyable(const NonCopyable&) = delete;
- NonCopyable& operator = (const NonCopyable&) = delete;
- };
- // int 타입에 대해선 받지 않겠음.
- struct NoInt
- {
- void f(double i);
- void f(int) = delete;
- };
- // f의 인자로 double 형을 제외하고는 완전히 금지하겠다.
- // 즉, 컴파일러가 암시적으로 형 변환하는 것까지 완벽 차단.
- struct OnlyDouble
- {
- void f(double d);
- template<class T> void f(T) = delete;
- };
'Basic Programming > C++ 11' 카테고리의 다른 글
C++11 - final, override 키워드 (0) | 2017.09.18 |
---|---|
C++11 - std::thread (0) | 2016.12.02 |
C++11 - std::mutex (lock_guard, try_lock, try_lock_for, recursive_mutex) (0) | 2016.11.25 |
C++11 - nullptr (0) | 2016.02.26 |
C++11 - enum (0) | 2016.02.26 |