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 |