물에 사는 벌레
delete의 다른 사용처 본문
delete 식별자는 일반적으로 할당한 메모리의 해제에만 이용되는 줄 알았으나, 함수 자체를 사용하지 못하게 하는 기능도 가지고 있었다. C++ 11 버전에 추가되었다고 한다.
사용 방법도 간단하다.
#include <iostream>
using namespace std;
class A
{
public:
A() { cout << "A 생성자 실행" << endl; }
~A() { cout << "A 소멸자 실행" << endl; }
};
template <typename T>
class UniquePointerClone
{
private:
T *ptr;
public:
UniquePointerClone(T* ptr) { this->ptr = ptr; }
~UniquePointerClone() { delete ptr; }
UniquePointerClone(const UniquePointerClone<T>& ref) = delete;
T* get() const { return ptr; }
};
void AF()
{
unique_ptr<A> uptrA(new A());
UniquePointerClone<A> uptrCloneA(new A());
// UniquePointerClone<A> uptrCloneA2 = uptrCloneA;
// 삭제된 함수 에러 메세지 발생
}
int main()
{
AF();
return 0;
// Output...
// A 생성자 실행
// A 생성자 실행
// A 소멸자 실행
// A 소멸자 실행
}
유니크 포인터 클론의 복사 생성자를 삭제해 버렸다.
물론 비공개 영역으로 옮겨도 같은 효과는 볼 수 있으나 출력되는 에러 메시지가 다르다.
'C++' 카테고리의 다른 글
오브젝트를 빅 엔디안 바이트 배열로 변환하기 (0) | 2019.08.30 |
---|---|
unique_ptr, shared_ptr 구현하기 (0) | 2019.08.15 |
우측값과 좌측값 그리고 이동 생성자 (0) | 2019.08.11 |
C++에서 C#의 델리게이트 구현하기 (0) | 2019.08.01 |
C++에서 가비지 콜렉터 구현하기 (0) | 2019.07.14 |
Comments