2011-01-23 5 views
4

그래서 .. 우리는 어떻게 호출 할 수 있습니까? memcpy (dataCopy, data, length); 추상 데이터를 복사하려면?memcpy 및 C++ 클래스 템플릿 - 사용 방법은 무엇입니까?

추상 T가 안전하지 않은 경우 T는 POD (일반 오래된 데이터, 기본적으로 C 구조체)임을 알 수 있습니다. 복사 할 수 있습니까?

+0

어떻게 memcpy를 사용 하시겠습니까? –

답변

3

임의의 C++ 유형 T에서 작업 하시겠습니까? T이 POD (일반 오래된 데이터, 기본적으로 C 구조체) 유형인 경우를 제외하고는의 개체를 memcpy으로 복사하는 것이 안전하지 않습니다. 그럴 경우 예를 들어 T의 복사 생성자가 실행되지 못하게되어 잘못된 복사로 이어질 수 있습니다. memcpystd::vector은 데이터 버퍼를 복사하지 않습니다.

+0

@Jeremiah : POD에 포인터가있는 경우'memcpy '로 객체를 복사하는 것이 안전할까요? 실제로 원본 객체의 복사본이 될까요? 어떤 종류의 사본이 될까요? – Nawaz

+0

@Nawaz - POD에 포인터가있는 경우 복사본이 유효합니다 (할당 작업을 사용하는 것과 같습니다). C와 마찬가지로 복사본이 얕아서 포인터가 가리키는 개체는 복사되지 않습니다. –

+0

@Jeremiah : 그런 종류의 사본이 당신에게 안전하다면, -mod가 아닌 non-POD를 복사 할 때 잘못된 점은 무엇입니까? – Nawaz

0

T의 유형에 따라 위험 할 수 있습니다. T가 POD 유형이면 모든 것이 괜찮습니다. 그렇지 않으면 간단히 T의 복사본 생성자를 호출하거나 (가능하지 않은 경우 복제 패턴을 사용하는 것이 좋습니다).

3

캔트 이렇게하면됩니다. 그렇게 쉽고, 가능하고, 신뢰할 수 있다면, 프로그래머는 operator=()을 오버로딩하지 않고 복사 생성자를 작성하지 않을 것입니다.

개체의 복사본을 만들려면 operator=()을 오버로드하거나 copy-constructor를 작성하거나 두 가지 작업을 모두 수행하십시오!