2010-09-06 8 views
0

Je suis nouveau en C++ et j'ai une question sur l'opérateur de déréférencement de surcharge. Je construis un magasin d'objets en mémoire qui doit être utilisé par les applications. Le magasin de données est mappé dans l'espace mémoire des applications et les applications peuvent directement lire/modifier l'objet à l'aide de l'opérateur de déréférencement. Je prévois de fournir est en cours de lecture ou d'écriture d'une interface décrite ci-dessousopérateur de déréférencement de surcharge

 DsObject *obj = get_ds_object_ref ("Junk"); // get reference to the object 
     int i = obj->value; // obj is read locked and the value is copied to i variable 
     obj->value = i; // obj is write locked and i is copied to the field "value" 

En fonction de surcharge de l'opérateur est-il un moyen de savoir si l'objet? Les suggestions sont les bienvenues.

+0

Vous pouvez obtenir une référence à l'objet, mais je ne pense pas que vous pouvez déduire l'intention de l'utilisateur sur la lecture ou l'écriture. – harper

+0

Dans votre dernier exemple, vous souhaitez écrire en verrouillant l'objet. Comment allez-vous libérer le verrou? – harper

Répondre

0

Je vous suggère d'utiliser les fonctions get/set, elles fournissent le type d'opération requis: lire ou écrire.

0

Non, je ne pense pas. Il n'est pas possible (AFAIK) de déterminer comment obj-> value est utilisé. Peut-être vous aurez besoin quelque chose comme ceci:

DsObject *obj = get_ds_object_ref ("Junk"); 
int i = GetValue(obj); 
SetValue(obj,i); 

Je suis désolé qu'il n'y a pas beaucoup plus que vous pouvez faire.

0

Pour verrouiller l'objet, vous avez besoin d'un objet proxy supplémentaire. Laissons l'opérateur derefence (ou tout autre) retourner le proxy qui fournit un optionneur de cast pour obtenir le type d'intentionen. La durée de vie du proxy peut être utilisée pour définir un verrou.