2009-12-04 4 views
1

Fondamentalement im im donner une très faible tir à essayer de centraliser la gestion de la mémoire. De toute façon, boost :: pool utilise des morceaux de certaines tailles.carte des piscines boost?

Mon idée originale, était de surcharger new et de supprimer, de passer la taille dans un singleton qui irait dans le pool de boost correspondant et alloc à partir de là.

std::map<size_t, boost::pool<> > m_MemPools; 

Quoi qu'il en soit, il semble que je ne peux pas avoir une carte de piscines boost, car il MSVC9 me donne l'erreur suivante,

:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\map(173) : error C2512: 'boost::pool<>::pool' : no appropriate default constructor available 

Pourquoi cela se produire?

EDIT

Je l'ai résolu, je fini par envelopper juste dans une shared_ptr, qui résout le problème.

Juste pour montrer quelque chose, je fais, et il donne toujours pas utiliser [] plus cette erreur,

class Pooly 
{ 
public: 

    Foo() 
    { 
    } 

    void RegisterPool(__in const size_t poolSize) 
    { 
     if(pools.find(poolSize) == pools.end()) 
      pools.insert(std::make_pair(poolSize, boost::pool<>(poolSize))); 
    } 
private: 
    std::map<size_t, boost::pool<> > pools; 
}; 

Im deviner qu'il a à faire avec std :: make_pair?

Etherway l'entourant un pointeur intelligent fonctionne bien, ne devrait pas être quelque chose qui devrait être inclus dans la piscine de poussée cependant?

+0

Quel problème tentez-vous de résoudre? Pourquoi avez-vous besoin de "centraliser la gestion de la mémoire"? N'est-ce pas ce que le système d'exploitation fait déjà pour vous? – jalf

Répondre

1

Utilisez-vous l'opérateur [] pour insérer dans la carte? Cela nécessite que le data_type, dans ce cas boost::pool, soit constructible par défaut, c'est-à-dire qu'il doit avoir un constructeur par défaut qui ne prend pas d'arguments. Mais boost::pool n'a pas de constructeur par défaut.

+0

Yep supprime les appels []. Résultats dans cette erreur tho. erreur C2248: « boost :: simple_segregated_storage :: simple_segregated_storage »: ne peut pas accéder à un membre privé déclaré en classe « boost :: simple_segregated_storage » Je vais le prendre ont essentiellement juste essayer autre chose? – UberJumper

Questions connexes