Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

물에 사는 벌레

delete의 다른 사용처 본문

C++

delete의 다른 사용처

물벌레 2019. 8. 11. 16:20

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 소멸자 실행
}

유니크 포인터 클론의 복사 생성자를 삭제해 버렸다.

물론 비공개 영역으로 옮겨도 같은 효과는 볼 수 있으나 출력되는 에러 메시지가 다르다.

Comments