힙에 포인터를 선언 할 수 있습니까?
-
16-09-2019 - |
문제
이것은 C ++의 힙에 변수를 작성하는 방법입니다.
T *ptr = new T;
PTR은 분명히 새로운 T에 대한 포인터를 말합니다. 내 질문은, 당신은 이것을 할 수 있다는 것입니다.
T *ptr = new T*;
그것은 매우 위험한 코드로 이어질 수있는 것 같습니다. 이것이 가능한지/올바르게 사용하는 방법을 아는 사람이 있습니까?
해결책
int** ppint = new int*;
*ppint = new int;
delete *ppint;
delete ppint;
다른 팁
new T*
포인터를 T에 대한 포인터로 반환합니다. 따라서 선언이 정확하지 않으므로 다음과 같습니다.
T** ptr = new T*;
그리고 그것은 힙에 상주 할 것입니다.
그렇습니다. 포인터에 대한 포인터를 선언 할 수 있습니다 ... 그렇습니다. 포인터가 힙에 있습니다.
왜 이와 같은 것이 필요한지에 대해 언급되었습니다. 떠오르는 것은 역동적 인 배열입니다. (대부분의 벡터 구현은 이것을 실제로 사용합니다.)
// Create array of pointers to object
int start = 10;
SomeObject** dynamic = new SomeObject*[start];
// stuff happens and it gets filled
// we need it to be bigger
{
SomeObject** tmp = new SomeObject*[start * 2];
for (size_t x = 0; x < start; ++x)
tmp[x] = dynamic[x];
delete [] dynamic;
dynamic = tmp;
}
// now our dynamic array is twice the size
결과적으로, 우리는 객체 자체가 아니라 배열을 늘리기 위해 많은 포인터를 복사합니다.
당신은 할 수 없습니다
T *ptr = new T*;
반환 유형 이후 new foo
"foo에 대한 포인터"또는 foo *
.
넌 할 수있어
T **ptr = new T*;
제휴하지 않습니다 StackOverflow