std::unique ptr vs std::ptr vs std::la faiblesse de la ptr vs std::auto ptr vs raw pointeurs

quelles sont les utilisations équivalentes de chaque pointeur intelligent par rapport à des techniques similaires (mais non limitées) utilisant des pointeurs bruts?

ma compréhension est minime, mais de ce que je peux en déduire:

  • Pointeurs Bruts: utilisez seulement si vous savez vraiment, vraiment, vraiment ce que vous faites et si vous avez soigneusement caché l'utilisation derrière une interface.
  • std:: auto_ptr: Obsolète jamais utiliser.
  • std:: unique_ptr: pointeur unique qui transfère la propriété lors de la cession.
  • std:: shared_ptr: pointeur de référence compté qui ne transfère pas la propriété au moment de la cession, mais augmente son compte de référence. Lorsque toutes les références sortent du champ d'application ou sont explicitement std::shared_ptr::reset sous-jacents deallocator est appelée.
  • std::weak: Un sous-type std::shared_ptr qui n'augmente pas le nombre de référence et qui est invalide lorsque son parent std::shared_ptr n'existe plus. Peut revenir et référence invalide. Vérifiez toujours avant d'utiliser.

RAW POINTER EQUIVALENT EXAMPLES

comptage de Référence, implémentations de cache:std::map<std::string, std::pair<long, BITMAP*> > _cache;

Singletons avec transfert de propriété:

class Keyboard {
public:
//...
    static Keyboard* CreateKeyboard();
    ~Keyboard();
//...
private:
//...
    Keyboard();
    static Keyboard* _instance;
//...
};

conteneurs groupés, aucune propriété: graphiques et arbres de partitionnement spatiaux, conteneurs itératifs, etc.

conteneurs composites, propriété: objets de Grande taille.

--EDIT--

comme je travaille, je suis tombé sur un cas intéressant, DeadMG a fait remarquer que les pointeurs intelligents sont censés être utilisés comme abstractions faciles pour prendre soin de la gestion des ressources; qu'en est-il des objets file-scope qui ne peuvent pas être créés sur le tas au moment de la déclaration mais doivent plutôt être créés à un moment ultérieur?

16
demandé sur Casey 2013-08-16 06:00:16
la source

1 ответов

Quel est l'idiome que chaque pointeur intelligent est censé remplacer?

chacun d'entre eux, jamais, qui a éventuellement impliqué la destruction de la ressource pointée vers. Donc, en d'autres termes, pratiquement tous d'entre eux. Je ne peux penser à aucune idiomes impliquant des pointeurs bruts qui n'ont pas impliqué la destruction d'une ressource pointée. Chaque autre utilisation n'est pas vraiment un idiome, c'est juste "utiliser un pointeur".

4
répondu Puppy 2013-08-16 06:23:31
la source

Autres questions sur c++ shared-ptr unique-ptr weak-ptr auto-ptr