2011-01-01 14 views
5

In C++ 0x, è legale/previsto che alcune classi possano essere copiate ma non spostate? Sto cercando di implementare una classe eterogenea che si ridimensiona e non sono sicuro di poterla gestire se alcune classi dovessero essere copiate e alcune dovessero essere spostate.Copia ma non si sposta

risposta

5

Sì, è legale per una classe di essere copiabile ma non mobile:

class MyClass { 
public: 
    /* Copyable... */ 
    MyClass(const MyClass&); 
    MyClass& operator= (const MyClass&); 

    /* ... but not movable. */ 
    MyClass(MyClass&&) = delete; 
    MyClass& operator= (MyClass&&) = delete; 
}; 

Tuttavia, non riesco a pensare a una buona ragione per cui qualcuno dovrebbe voler fare questo. Conoscendo i programmatori C++ (come me!), Penso che dovresti anticipare che questo potrebbe emergere.

Per curiosità, su quale codice si basa ciò che si interromperà se una classe fosse copiabile ma non mobile?

+0

È uno stack eterogeneo che viene ridimensionato. Suppongo che se voglio la compatibilità con C++ 03 con il minimo sforzo, dovrei consentire entrambi. – Puppy

+1

Hmm ... cosa è specificamente nel codice che si interrompe con gli oggetti copiabili, immobili (credo che sia un termine ragionevole per questo?)? Sono curioso dal momento che non ho mai visto prima questo. – templatetypedef

+0

È una buona cosa che tu abbia detto. Per qualche ragione, avevo in mente che gli oggetti che erano stati spostati non avevano bisogno di essere distrutti. Ops. – Puppy

0

Sono abbastanza sicuro che rendere il trasferimento protetto/privato è un modo per limitare la possibilità di spostare oggetti di quella classe. Se te lo puoi aspettare in un modello? Io non la penso così Avresti bisogno di std::enable_if per questo tipo di controllo.

Problemi correlati