2014-02-18 3 views
0

내가 생각 나는 수 중 단지배열을 올바르게 청소하는 방법은 무엇입니까? 내가 0 에 동적 배열의 모든 요소를 ​​삭제하고 설정한다고 가정 해요 C++

  • 루프 및 유형에 따라 0 또는 NULL을에 모든 설정을 내가 남용하지 않도록해야
  • 또는 그냥 삭제하고, 장기적으로 좋은 연습의 측면에서 같은 크기

로 새로운 배열을 재 할당 할 수는 나는 경우 ([] somePointer, 새로운 삭제 제대로 청소 해주십시오.) 또는 실제로 아무런 차이가 없습니까?

+0

소멸자를 호출하거나 할당 된 메모리를 어떻게 든 다시 사용하거나 특정 메모리 영역을 명시 적으로 덮어 쓰시겠습니까? 실제로 달성하고자하는 것을 보여주는 세부 정보/코드를 추가하십시오. – moooeeeep

+0

@ simonc 그게 요소가 아닌 0을 제거합니다. – Angew

답변

7

이 경우에는 배열의 저장 공간을 해제하고 다시 할당하지 않는 것이 좋습니다. 여러분이 기대할 수있는 최선의 방법은 배열의 모든 요소에 쓰는 것만 큼 효율적이 될 것이라는 것입니다. 실제로는 거의 항상 조금 느립니다.

아마 루프를 작성하지 않을 수도 있습니다. 배열에 0 또는 nullptr (등)을 채우기 위해 std::fill 또는 std::fill_n을 사용할 것입니다.

1

처음에는 std::vector을 사용하십시오. 또한 포인터를 저장하지 않거나 RAII를 std::shared_ptr 또는 std::unique_ptr과 같이 사용하는 한 특별한 작업을 수행 할 필요가 없습니다.

+0

어떻게 요소를 0으로 지우는 지 설명합니다. –

+0

@TonyD, 원시 포인터가있는 배열을 사용하지 않는다고 설명합니다. OP가 그 순간에하고 있다는 것이 뻔뻔 ​​스럽습니다. – StoryTeller

2

빌드 유형이있는 배열의 모든 요소를 ​​0으로 설정하려면 삭제하고 새 배열을 다시 할당하면됩니다. 다음과 같이하면됩니다.

std::fill(arr,arr+size,0); 
0

나중에이 작업을 수행하려면 + 새 작업을 수행하면 성능 오버 헤드가 발생합니다. 대신 std :: fill 또는 memset 함수를 사용하십시오.

4

memset()을 호출하여 메모리를 지울 수도 있습니다. 삭제 및 재 할당은 비용이 많이 들고 단편화 될 수 있습니다.

0

적절한 방법은 std::vector<>입니다. clear() 메서드를 사용하면 원래 용량을 유지하면서 벡터의 모든 요소가 파괴되므로 다시 불러 오지 않고 새 요소를 추가 할 수 있습니다.