2013-04-20 2 views
2

인가가 새로운 정의 배열의 크기를 알 수있는 기능 (즉,이 기록 될 수 있습니다) :배열의 크기가 new로 정의 되었습니까?

int *a=new int[3]; 
    *a=4; 
    *(a+1)=5; 
    *(a+2)=6; 

감사합니다!

+0

참고 : 표시된 "중복"질문은 의미는 있지만 불완전한 질문은 관련이 있지만 다른 프로그래밍 언어 및 다른 할당 기능과 관련되어 있으므로 의미가 있습니다. – nobar

답변

7

new으로 할당 된 배열의 크기를 가져 오는 표준 방법은 없습니다.

배열 할당에 대한 더 나은 접근법은 이며, 이는 size() 회원을 가지며 범위를 벗어날 때 자동으로 정리됩니다.

5

짧은 대답 : 아니요.

대신 std::vector을 사용하십시오.

0

이 기능을 작성할 수 있습니다. 그러나 현실 세계에서는 가난한 아이디어입니다.

new을 호출하는 동작은 할당 된 배열의 요소 수 (또는 실제 할당의 크기 이상)를 저장하는 것이 가장 가능성이 있지만, 해당 정보를 방법은 특정 시스템에서 new이 어떻게 작동 하는지를 알지 않고 코드를 다르게 컴파일하거나 (예 : 코드의 디버그 또는 릴리스) 컴파일러 (또는 런타임 라이브러리)의 버전 변경 등과 같이 변경 될 수 있습니다.

앞서 언급 한대로 std::vector을 사용하는 것이 훨씬 좋은 방법입니다. 그 이유는 여러분이 다른 곳에서 배열을 해제하는 것에 대해 걱정할 필요가 없기 때문입니다.

어떤 이유로 든 std::vector을 사용하고 싶지 않거나 교사에게 들려주고 싶지 않다면 할당 크기를 "기억"해야합니다.