빠른 질문 :새로운 T [1]을 할 때 어떤 일이 벌어지고 있습니까? 여기
1.I 배열을 할당, 여분의 메모리가 들었 : 위의 코드에 따라서
template <class T>
T* allocate(std::size_t n){
return new T[n];
}
, 우리는 new T[1]
을하고있는 n==1
, 그래서 나는이 걱정이 배열의 길이를 저장하는 데 사용됩니다 (확신 할 수 없음). new T[1]
을 많이 사용하면 많은 양의 메모리가 낭비 될 수 있습니다.
2. delete[]
또는 간단히 delete
을 사용하여 이것을 해제 할 수 있습니까?
그래서'n == 1'에 대한 if 문이 라이브러리로 권장됩니까? '알맞은'할당자가이 문제를 어떻게 처리할까요? – YiFei
@YiFei :'if (n == 1) '을 사용하여 할당 할 때'new'와'new []'사이를 전환하면'delete'와'delete' 사이를 전환해야합니다 []'을 사용하여 삭제 시점에서 같은'if (n == 1)'. 이를 위해 당신은 어딘가에서'n '을 독립적으로 저장해야 할 것입니다. 이것은 같은 값의'n '에 대해 많은 배열을 할당하지 않으면 (즉, 많은 수의 배열에 대해 하나의'n'을 저장하는 경우가 아니라면)이 모든 것을함으로써 얻을 수있는 모든 절약을 희석 할 (또는 닦아 낼 가능성이 있습니다) . – AnT
바로 지금, allocator에 대한 개념을 새롭게 한 것처럼 보였습니다. deallocate에는 다른 매개 변수가 필요합니다. 감사:) – YiFei