문제

이것은 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*;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top