클래스가 약 50 명입니다. 그 중 1 개는 포인터입니다. 그래서, 당연히 나는 내 자신의 복사 생성자를 만들고 모든 것을 복사하고 그 객체의 새로운 인스턴스를 만들어야 만합니다. 내 질문은 : 지름길 또는 일부 복사 할 수있는 몇 가지 특별한 방법이 있습니까 (기본 복사 생성자 않습니다) 그런 다음 한 포인터를 처리 할? 수동으로 각 구성원을 복사하는 것이 아닙니다.복사 생성자 바로 가기
답변
당신이 원하는 방식으로 복사본을하는 도우미 클래스에 포인터를 래핑 할 수 있습니다. 그렇게하면 기본 클래스로 큰 클래스를 떠날 수 있습니다.
그것을하는 청결한 방법. –
즐겁게도 Pimpl 관용구를 쉽게 지원할 수있는 클래스를 작성했습니다. 그것은 반드시 쉬운 수업은 아니지만 한 번 끝내면 어디에서나 다시 사용할 수 있습니다 : D –
또는 포인터가 아닌 모든 데이터를 자체 구조체에 넣을 수 있습니다. –
대신 스마트 포인터를 사용하고 클래스의 기본 복사 생성자를 사용하십시오.
표준 스마트 포인터 (unique_ptr
, shared_ptr
)에는 개체를 복사하는 복사 생성자가 없지만 직접 복사 할 수 있습니다.
'shared_ptr' doesn ' 복사 생성자가 있습니까? –
개체를 복사 할 복사 생성자가 없습니다 (내부 포인터를 복사하고 참조 카운터를 증가시킵니다) – Kos
기본 복사본이 작동하지 않는다고 했으므로 개체가 pointee를 소유한다고 가정합니다.
제대로 정리되는 얕은 사본이 필요한 경우 C++ 11 또는 부스트에서 shared_ptr
을 사용하십시오.
깊은 복사본이 필요한 경우 먼저 포함 된 개체를 포인터 대신 값으로 저장하도록 제안합니다. 그런 다음 복사본을 무료로 가져오고 추가 메모리 관리 세트에 대해 걱정할 필요가 없습니다.
마지막으로 옵션이없는 경우 딥 복사 의미를 처리하는 포인터 래퍼를 작성합니다 (부스트가 이러한 클래스를 제공한다고 생각하지 않습니다).
값으로 저장하면 소유권을 구현하는 # 1 옵션이지만 몇 가지 제한 사항이 있습니다 (예 : 두 개체 바인딩 '평생 함께, 항상 바람직한 것은 아니다). 값처럼 작동하는 스마트 포인터는 OP의 경우에도 유용 할 수 있습니다. 스탠다드 라이브러리 나 부스트도 하나도 없다는 이상입니다. – Kos
- 1. 생성자 호출 바로 가기
- 2. C# 생성자 바로 가기 내가이 개 수업을
- 3. Windows에서 바로 가기 바로 가기
- 4. 점프 목록 복사 디스크에 대한 바로 가기
- 5. Visual Studio 바로 가기 바로 가기
- 6. 바로 가기
- 7. 바로 가기
- 8. 바로 가기
- 9. 여러 메뉴에 바로 가기 만들기
- 10. 복사 생성자 ++
- 11. 복사 생성자
- 12. 복사 생성자?
- 13. 복사 생성자
- 14. drupal에서 바로 가기 만들기 7.17
- 15. 바로 가기 URL의 Windows 바로 가기 (.lnk .url) 파서
- 16. P4 Diff/P4 폴더 바로 가기 키 바로 가기
- 17. QTextBrowser - "링크 위치 복사"상황에 맞는 메뉴 바로 가기
- 18. C++ 템플릿 매크로 바로 가기
- 19. Android 실행기 바로 가기
- 20. 조건부 바로 가기
- 21. 루비 바로 가기?
- 22. 생성자의 바로 가기
- 23. 코드 편집 바로 가기
- 24. SHBrowseForFolder 및 바로 가기
- 25. SQL 쿼리 바로 가기
- 26. 명령 프롬프트 바로 가기
- 27. bash - 실행 바로 가기
- 28. Eclipse 탐색 바로 가기
- 29. 경로가없는 Windows 바로 가기
- 30. C# 어셈블리 - 바로 가기
50 회원들! 이것을보십시오 : http://objectmentor.com/resources/articles/srp.pdf –