본문 바로가기
c++/모던c++

모던c++ delete

by kcj3054 2022. 3. 29.

delete (C++ 11)

  • delete? 내가 필요로하지 않는 함수를 삭제하는 것이다. !

  • c++11에 delete가 나오기 전에는 private를 이용해서 사용하지 않을 함수를 막을 수 있었다 그렇지만 여기서 private로 하더라도 friend를 이용하면 프렌드인 클래스는 접근이 가능하다.. 이건 반쪽짜리 막기 방법이다. 여기서 완전히 막는 방법이 delete로 나오게 되었다.

복사 대입연산자 막기 private 버전

#include <iostream>
using namespace std;

class Knight
{
public:
private:
    void operator=(const Knight& k1)
    {

    }

    //friend class Admin; 
private:
    int _hp = 100;
};

class Admin
{
public:
    void CopyKnight(const Knight& k)
    {
        Knight k1;
        k1 = k;
    }
};
  • 위 코드에서 private 내부에 주석 처리된 friend class Admin을 해제하면 Admin 클래스에서는 Knight의 복사 연산자가 허용이된다.. 이렇게 되면 무용지물이되는 것이다..

  • 이 반쪽짜리 막기를 해결하기 위해서 나온 것이 delete 버전!

c++11 delete 함수

#include <iostream>

using namespace std;

class Knight
{
public:

public:
    void operator=(const Knight&) = delete; 
private:
    int _hp = 100;
};
  • 간단하다 ! public으로 열어주되 사용하지 않을 함수를 = delete로 막아주면 끝..
  • 루키스님의 c++강의를 보고 공부 후 작성하였습니다.

'c++ > 모던c++' 카테고리의 다른 글

c++20(concept)  (0) 2022.05.23
varidic template (가변인자.. tuple직접구현..)  (0) 2022.05.22
c++ 11 가변인자템플릿 varidic template  (0) 2022.04.07
전달 참조 forwarding reference (c++17)  (0) 2022.03.29
오른값 참조 &&  (0) 2022.03.29