2009-02-25 9 views
2
struct Foo 
{ 
    void SayHello() 
    { 
     std::cout << "Hi, I am Foo"; 
    } 
}; 

J'ai la structure donnée ci-dessus. J'ai vu un tel usage dans l'une de nos bases de code.Différentes méthodes pour utiliser une classe/struct - C++

Foo foo; 
{ 
    foo.SayHello(); 
} 

OMI, Il fait même comme

Foo foo; 
foo.SayHello(); 

Ou est-il un avantage/différence pour la première méthode?

Des pensées?

Répondre

5

Dans ce cas particulier, il semble assez étrange et comme un candidat à l'examen. Peut être utile dans d'autres cas:

Foo foo; 
{ 
    ReturnValue v = foo.SayHello(); 
    Send(v); 
} 
... 

Lorsqu'il limiterait la portée de v. Une utilisation courante consiste à détruire les objets qui s'y trouvent plus tôt. Les classes qui font des choses spéciales dans leur constructeur et destructor peuvent ensuite être utilisés à l'intérieur des accolades:

Foo foo; 
{ 
    MutexLocker locker(sendMutex); 
    ReturnValue v = foo.SayHello(); 
    Send(v); 
} 
... 

Le verrou pour l'envoi-file d'attente aurait lieu lors de l'envoi v dans cet exemple, et être libéré lorsque le casier est détruit à l'accolade de fermeture.

+0

Cela prend tout son sens. Merci litb. –

0

vous Avez par hasard signifie que votre première option est

{ 
    Foo foo; 
    foo.SayHello(); 
} 

Cela aurait plus de sens car alors l'objet foo est créé, utilisé et détruit dans le cadre plus petit des accolades qui l'envelopper . C'est une pratique courante qui vise à réduire la durée de vie des choses transitoires. Souvent, ces sous-blocs peuvent être refactorisés en fonctions séparées.

0

Identique à l'écriture (pour autant que je sache).

Comme d'autres personnes l'ont dit, cette construction est généralement utilisée pour limiter la portée de quelque chose, mais dans votre exemple, il n'y a pas de différence.

4

Il n'y a pas de différence entre les deux exemples. Cependant, ce qui suit, serait créer et détruire l'objet foo dans le cadre des accolades:

{ 
    Foo foo; 
    foo.SayHello(); 
} 

Ceci est utile pour les objets qui suivent l'idiome RAII.

Questions connexes