나는 Widget
이라는 클래스를 가지고있다. 이 클래스는 추상 클래스이며 가상 메소드가 있습니다. 객체를 자르지 않으려면 Widgets
이 참조 또는 포인터로 저장됩니다. 나는 내부적으로 주어진 위젯을 저장하는 생성자가있는 여러 클래스를 가지고있다. 따라서 Widget
은 생성자 외부에서 초기화되어야하며 객체가 생성되기 전에는 삭제 될 수 없으므로 일반적으로 Widget
이 동적 메모리를 통해 할당됩니다. 내 질문은이 동적 메모리를 처리하는 방법에 관한 것입니다. 나는 옵션리스트를 컴파일했다. (다른 사람들에게 자유롭게 제안하자.) 가장 관용적 인 것은 어느 것인가?다형성 및 자원 관리에 관한 프로그램 설계
1. 스마트 포인터. 스마트 포인터가 올바른 선택 인 것 같지만 C++ 98을 사용하고 있기 때문에 내 포인터를 써야합니다. 나는 또한 항상 smart_pointer<Widget>
을 쓰는 것이 약간 추한 것이라고 생각한다.
2. 저장시 Widgets
을 복사하십시오. 또 다른 조치는 원본 대신에 Widget
이 전달 된 복사본을 저장하는 것입니다. 이로 인해 개체 조각이 발생할 수 있지만 잘 모르겠습니다. 또한 사용자는 전달 된 Widgets
을 저장하는 클래스 자체를 작성하려고 할 수도 있습니다. 너무 복잡하게 만들고 싶지는 않습니다.
3. 사용자가 모든 것을 처리하게하십시오. 아마도 사용자가 Widget
이 제 시간에 삭제되었는지 확인하도록 만들 수 있습니다. 이것은 Qt가하는 것 같습니다 (?). 그러나 이는 다시 사용자에게 복잡한 일입니다.
스마트 포인터를 사용합니다. 결함이 있어도'std :: auto_ptr'이 있습니다. 'std :: auto_ptr'가 작업을 수행하지 않는다면 이미 작성한 것을 찾거나 이미 작성한 것을 찾는다. – Galik
그리고'typedef unique_pointer WidgetUPtr; '과 같은 것들을 사용하여 덜 자세하게 입력 할 수 있습니다. –
Galik
또 다른 옵션으로'clone' 이디엄이 있습니다. https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Virtual_Constructor. * 옵션 2 *와 함께 사용하면 오브젝트 조각을 피할 수 있습니다. –