2010-11-25 2 views
1

는 :비활성화 클래스 포인터 증가/감소 연산자 예제 코드를 들어

A* pA = new A; 

나는 컴파일 단계에서 포인터 증가/감소 연산자를하지 않도록해야합니다

할 불가능
pA++; // MUST failed during compilation phase 
+0

인라인 함수 인 'strlen()'을 구현하면 충분히 컴파일 할 수있는 파일에 포함됩니다. – MSalters

+2

@MSalters OP는 A에 대한 포인터 만 요청했지만 strlen (A *)은 제공되지 않습니다. – Simone

+0

그래서'A' 배열을 만들고 반복 할 때 어떻게해야합니까? – jalf

답변

1

. 난 당신이 의도하지 않은 오류를 방지하기 위해 그렇게하고 싶은 생각 때문에

, 나는 스마트 (엉덩이) 솔루션들은 오류의 가능성 :

증가하기 때문에 (등 일부 포인터와 같은 래퍼 클래스를 발명 포함)이 적용되지 않는 것 같아요
+0

>> 의도하지 않은 오류를 피하기 위해 그렇게하고 싶습니다. 예, 맞습니다. – StNickolay

1

원시 포인터를 사용하려면 불가능합니다.

해당 연산자 (일명 스마트 포인터)를 구현하지 않는 클래스로 포장해야합니다.

2

당신은이는 A 객체는 pA에게 CONST 포인터를 만드는

A * const pA = new A; 

로 연평균 선언 할 수 있습니다. 포인터는 초기화 후에는 변경할 수 없지만 포인터의 내용은 변경할 수 있습니다.

는 const를 한 개체에 대한 포인터입니다

const A *pA = new A; 

을 비교합니다.

A 객체의 배열을 반복하려는 경우 별도의 포인터가 필요합니다.

A * const pAs = new A[size]; 

for (A * iter = pAs; iter < pAs+size; ++iter) 
{ 
    // do stuff 
}