2010-11-25 18 views
1

Pour exemple de code:opérateurs d'incrémentation/décrémentation pointeur de la classe Désactiver

A* pA = new A; 

je dois éviter les opérateurs d'incrémentation/décrémentation de pointeur lors de la phase de compilation:

pA++; // MUST failed during compilation phase 
+0

Cela serait nul pour l'implémentation de 'strlen()', qui est très probablement une fonction inline et incluse dans la plupart des fichiers que vous compilerez. – MSalters

+2

@MSalters OP n'a demandé que des pointeurs sur A, strlen (A *) n'est pas fourni de toute façon. – Simone

+0

Alors, que ferais-je si je crée un tableau de 'A' et que je veux l'itérer? – jalf

Répondre

1

C'est impossible de le faire.

Depuis que je suppose que vous voulez faire pour éviter les erreurs non intentionnelles, je suppose que des solutions intelligentes (cul) ne sont pas applicables (y compris inventer des classes wrapper pointeur comme etc) parce qu'ils augmentent la probabilité d'erreurs :)

+0

>> Puisque je suppose que vous voulez faire cela pour éviter les erreurs involontaires. Oui c'est vrai. – StNickolay

1

Si vous voulez coller avec des pointeurs bruts, c'est impossible.

Vous devez l'inclure dans une classe qui n'implémente pas les opérateurs (les pointeurs intelligents).

2

Vous pouvez déclarer pA comme

A * const pA = new A; 

Cela rend pA un pointeur const à un Objet. Le pointeur ne peut pas être changé après l'initialisation, mais le contenu de celui-ci peut.

comparer

const A *pA = new A; 

qui est un pointeur vers un objet const A.

Si vous souhaitez effectuer une itération sur un tableau d'objets A, obtenez un pointeur distinct.

A * const pAs = new A[size]; 

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