2012-09-05 5 views
0

En supposant pointeur partagé peut être créé comme suitC++ bibliothèque Boost - passer le pointeur à une fonction partagée

typedef boost::shared_ptr<Employee_t> srdpointer;  
srdpointer ptr((Employee_t*)malloc(sizeof(Employee_t)),std::ptr_fun(free)); 

Je dois passer le pointeur partagé qui allouer de la mémoire pointée par le PTR. Quelque chose comme ça.

void allocateBlocks(int **ptr, int *cnt) 
{ 
    *ptr = (int*)malloc(sizeof(int) * 10); 
    *cnt = 10; 
    /*do something*/ 
} 

int main() 
{ 
    int *p = NULL; 
    int count = 0; 
    locateBlocks(&p, &count); 

    /*do something*/ 

    free(p); 
} 

Comment puis-je obtenir la fonctionnalité similaire en utilisant shared_ptr comme indiqué dans le code ci-dessus.

+0

puis-je vous demander pourquoi vous utilisez 'malloc' et non' new'? – Default

+0

Aime, comme std :: vector répondra à vos besoins. – Greg

+0

Etes-vous conscient que l'instance 'reset()' ing 'shared_ptr' avec un nouveau pointeur ne modifie pas les autres instances' shared_ptr' (elles pointeront vers l'ancien objet)? – Greg

Répondre

-1

Voulez-vous dire quelque chose comme ça?

void allocateBlocks(boost::shared_ptr<int>& out, int& count) 
{ 
    out.reset(new int[...]); 
    count = 10; 
} 

PS: Je suggère d'avoir un coup d'oeil boost :: shared_array <> & amis pour seulement allouer dynamiquement des tableaux.

PS: Un fichier std :: vector <> aussi?

+0

"Puis-je vous demander pourquoi vous utilisez malloc et pas nouveau" - Notre application est un mélange de code C et CPP. –

+0

-1 Passage de la mémoire 'malloc'-ed dans une construction qui la libérera avec l'opérateur' delete'. –

+0

Correction de la chose malloc – duselbaer

Questions connexes