반응형
반응형
클래스가 동적으로 메모리가 할당되는 멤버변수를 가지는 경우 디폴트 복사 생성자와 대입 연산자를 사용하게 되면, 얕은 복사가 발생해 Dangling Pointer와 메모리 누수가 발생 할 수 있습니다. 때문에 클래스가 복사되는 것을 막는 방법이 필요합니다. class SomeObj { public: ... privatre: SomeObj(SomeObj&); // 선언은 하되 구현은 하지 않는다. SomeObj& operator=(SomeObj&); // 선언은 하되 구현은 하지 않는다. }; 또는 class Uncopyable { public: Uncopyable() {} ~Uncopyable() {} private: Uncopyable(Uncopyable&); // 선언은 하되 구현은 하지 않는다. Un..
C++에서 스마트 포인터 템플릿 데이비드 하비 (David Harvey) ⓒ 1995/1996 David Harvey. All rights reserved Contact Home: http://www.davethehat.com/ 작성 날짜 :1997년 6월 27일 1997 년 11 월 30 일 수정 이 글을 쓸 수 있도록 권한을 준 개체 디자이너에 대한 감사를 표함 이 문서는 형식화 된 개체 변수의 구현에서 작동하도록 넣어 유용한 C + + 템플릿 관용구의 설명을 제공합니다. 템플릿 의 C + + 몇 시간 동안 , 작년 정도 의 언어 의 이 기능 의 잠재력 에 대한 관심이 급증 가능성을 보여줬습니다 . 일부가되어 있지만 이 인기있는 컴파일러 의 믿을 수있는 (물론, 합리적으로 신뢰할 수있는 ) 구현 의 ..
C++에서 최대의 단점으로 꼽히는 메모리 관리의 불편함은 스마트 포인터를 사용함으로써 어느 정도 극복할 수 있다. 하지만, 스마트 포인터는 만능이 아니며, 더군다나 연산자 오버로딩만으로 쉽게 사용할 수 있는 것은 더더욱 아니다. 물론, 앞으로 tr1에 포함된 boost::shared_ptr이 std::auto_ptr을 대신해 표준으로 포함될 예정이므로(이것은 std::auto_ptr이 없어진다는 것이 아니라, C++의 새로운 대표적인 스마트 포인터로 자리 매김할 것이라는 뜻이다) 스마트 포인터를 직접 만들어야 하는 일은 여간해서는 없겠지만, 몇몇 상황에서는 커스터마이즈된 스마트 포인터를 사용해야 할 필요성이 있다. 예컨데, 레퍼런스 카운팅 전략이 특정 상황에서는 맞지 않을 수도 있고, 현재 표준에 포함된..
C++ 기본 제공(bult-in) 포인터(이하 벙어리(dumb) 포인터) 대신 스마트 포인터를 사용하는 세가지 이유 생성(construction)과 소멸(destruction) 작업을 조절할 수 있다. 리소스 누수를 막는 것 복사(copy)와 대입(assignment) 동작을 조절할 수 있다. 역참조(dereferencing) 동작을 조절할 수 있다. 스마트 포인터는 C++ 기본 제공 포인터처럼 가리킬 타입이 정확하게 지정되야함 타입제약이 엄격하다(strongly typed) 스마트 포인터의 생성, 대입, 소멸 스마트 포인터의 생성, 대입, 소멸은 소유권(ownership)이라는 것 때문에 꽤 복잡함. auto_ptr은 대입시 LHS 변수에 소유권이 넘어가게되고 RHS 변수의 포인터에는 NULL이 들어간..
다른건 다 병신같은게 이건 아름답고 괜찮은 것 같음 다른 mid파일은 ㅅㅂ 기계음 썼는지 삐리리리리리 병신 같이나거나 아예 안나기도 하고. Midibanks에 mid파일 맘에드는 걸 못 찾으셨다면 이것을 응용해도 좋습니다.