본문 바로가기

C++

[C++] 사용하지 않는 함수 삭제하기

Modern C++이전에는 암시적으로 실행되는 클래스의 복사 생성자 등을 막기 위해 private을 사용했다.

 

class A
{
private:
	operator= (const A& a); //대입 연산자 private으로 막기
    
    friend class B;
}

class B
{
public:
	void CopyA(const A& a)
    {
    	A a1;
        a1 = a;
    }
}

 

위 코드에서 A 클래스의 대입 연산자를 private 선언하고 구현부를 선언하지 않음으로써 막았다.

그래서 오류가 나야 정상이지만 B 클래스를 friend class로 선언하니 오류가 발생하지 않는 문제가 발생한다.

 

public:
	operator= (const A& a) = delete;

 

delete를 이용하면 컴파일 전에 바로 오류가 발생한다. private를 붙여줄 필요도 없다.

 

'C++' 카테고리의 다른 글

[C++] 람다  (0) 2022.06.25
[C++] 오른값 참조(rvalue reference)  (0) 2022.06.25
[C++] enum vs enum class  (0) 2022.06.25
[C++] typedef보다 using을 사용하자.  (0) 2022.06.25
[C++] NULL은 int고 nullptr은 포인터다.  (0) 2022.06.25