2011-03-30 4 views
2

std::fill을 사용하여 비 POD 유형의 배열을 초기화 할 수 있습니까?첫 번째 초기화가 가능한 비 POD 배열에 대한 std :: fill_n?

std::filloperator=을 사용하여 배치를 복사하지 않는 배열을 초기화합니다. 그러나 할당 연산자는 실제로 볼 수있는 한 초기화되지 않은 공간에서 호출 될 때 현재 메모리를 해제 할 기회가 없습니다.

예 :

struct NonPod 
{ 
    std::string myStr; 
}; 

NonPod arr[10]; 
NonPod prototype; 
NonPod * ptr = &arr[0]; 
std::fill_n(ptr, 10, prototype); 
+1

'arr'을'NonPod arr [10];으로 선언하지 않은 이유가 있습니까? –

+0

어리 석음, 나는 짐작한다 :) – Manuel

답변

5

당신은 memory 헤더의 algorithm 헤더에서하지 std::fill_n에서 std::uninitialized_fill_n 찾고 있습니다.

그러나주의하십시오! 코드에서 정렬 또는 패딩을 고려하지 않습니다. std::alignment_of을 사용하거나 사용할 수없는 플랫폼에서 적절한 부스트 대체를 고려하십시오.

관련 문제