cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 12 janv. 2012 à 16:40
>> parce que si tu utilise bcp de memoire avec shared_array tu peux etre sure qu'il sera detruis tout seul
Je ne vois pas le rapport.
>> exemple de difernece entre un normal vector et shared_array
Ton exemple n'est pas probant. Tu es sur d'avoir bien compris l'intérêt d'un shard_array ?
Dans ton code, avoir un shared_array ne sert strictement à *rien*.
Un shard_array est un smart pointer, qui au lieu de pointer sur une valeur, pointe sur un tableau de valeur. Ce qui permet effectivement de détruire automatiquement celui-ci. Or, cette automatisation de la destruction, n'a de sens que si tu fais transiter cette structure. Ce qui n'est pas le cas ici. La notion de RAII s'en charge déjà.
Pour simplifier, voici un exemple:
// Pas bien
void func()
{
int* a = new int;
delete a;
}
// Un peu mieux
void func()
{
smart_pointer a = new int;
}
// Bien mieux !
void func()
{
int a;
}
Ici, si tu avais fait un std::vector, celui-ci aurait été détruit *automatiquement* lorsque ta matrice aurait été détruite (puisque c'est la classe Matrice qui a la charge de la destruction des ses attributs).
C'est donc un très mauvais exemple d'utilisation d'un shared_array.
> en plus ya pas bcp de tutoriaux sur boost::shared_array sur le net
Si tu veux faire un exemple d'utilisation, fais-le avec un bon exemple: Un principe de COW (copy on write), ou un flyweight, par exemple.
Je ne suis pas convaincu de ton explication. En plus de cela, il y a pas mal de maladresse dans le code ("Matrice" au lieu de "const Matrice&", bonjour les copies..., du using namespace std; beurk, des variables globales, etc...).
>> et encore pas d'algo pour gerer une chaine de caractere d'operations avec la std::string
C'est faux. Il y a plein de Lexer et de Parser sur ce site...
Pour toutes ces raisons, je supprimerais cette source d'ici 24h.
mosaidrd
Messages postés13Date d'inscriptionsamedi 18 avril 2009StatutMembreDernière intervention12 janvier 2012 12 janv. 2012 à 15:12
exemple de difernece entre un normal vector et shared_array
typedef float **matrice;
matrice fonction(matrice M1,matrice M2){
matrice tmp;
//tmp=allocation avec new
//operations.....
return tmp;
} //ici tmp n'est pas supprimé
// si tu apel delete [] la fonctions sera
// inutile car elle returnera tmp=NULL;
// si il etai un shared_array il sera
// detruis apré l'appel de la foonction.
mosaidrd
Messages postés13Date d'inscriptionsamedi 18 avril 2009StatutMembreDernière intervention12 janvier 2012 12 janv. 2012 à 15:05
par ce que si tu utilise bcp de memoire avec shared_array tu peux etre sure qu'il sera detruis tout seul
en plus ya pas bcp de tutoriaux sur boost::shared_array sur le net
et encore pas d'algo pour gerer une chaine de caractere d'operations avec la std::string
je crois qu'il emporte bien du nouveux . :)
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 12 janv. 2012 à 12:34
Bonjour.
Une seule question (Pour savoir si je supprime ou non cette source):
- Quel intérêt d'utiliser un boost::shared_array plutôt qu'un std::vector ? Ici, je ne vois pas du tout ce que ça apporte...
À part ça, cette source n'apporte rien de plus que les autres.
12 janv. 2012 à 16:40
Je ne vois pas le rapport.
>> exemple de difernece entre un normal vector et shared_array
Ton exemple n'est pas probant. Tu es sur d'avoir bien compris l'intérêt d'un shard_array ?
Dans ton code, avoir un shared_array ne sert strictement à *rien*.
Un shard_array est un smart pointer, qui au lieu de pointer sur une valeur, pointe sur un tableau de valeur. Ce qui permet effectivement de détruire automatiquement celui-ci. Or, cette automatisation de la destruction, n'a de sens que si tu fais transiter cette structure. Ce qui n'est pas le cas ici. La notion de RAII s'en charge déjà.
Pour simplifier, voici un exemple:
// Pas bien
void func()
{
int* a = new int;
delete a;
}
// Un peu mieux
void func()
{
smart_pointer a = new int;
}
// Bien mieux !
void func()
{
int a;
}
Ici, si tu avais fait un std::vector, celui-ci aurait été détruit *automatiquement* lorsque ta matrice aurait été détruite (puisque c'est la classe Matrice qui a la charge de la destruction des ses attributs).
C'est donc un très mauvais exemple d'utilisation d'un shared_array.
> en plus ya pas bcp de tutoriaux sur boost::shared_array sur le net
Si tu veux faire un exemple d'utilisation, fais-le avec un bon exemple: Un principe de COW (copy on write), ou un flyweight, par exemple.
Je ne suis pas convaincu de ton explication. En plus de cela, il y a pas mal de maladresse dans le code ("Matrice" au lieu de "const Matrice&", bonjour les copies..., du using namespace std; beurk, des variables globales, etc...).
>> et encore pas d'algo pour gerer une chaine de caractere d'operations avec la std::string
C'est faux. Il y a plein de Lexer et de Parser sur ce site...
Pour toutes ces raisons, je supprimerais cette source d'ici 24h.
12 janv. 2012 à 15:12
typedef float **matrice;
matrice fonction(matrice M1,matrice M2){
matrice tmp;
//tmp=allocation avec new
//operations.....
return tmp;
} //ici tmp n'est pas supprimé
// si tu apel delete [] la fonctions sera
// inutile car elle returnera tmp=NULL;
// si il etai un shared_array il sera
// detruis apré l'appel de la foonction.
12 janv. 2012 à 15:05
en plus ya pas bcp de tutoriaux sur boost::shared_array sur le net
et encore pas d'algo pour gerer une chaine de caractere d'operations avec la std::string
je crois qu'il emporte bien du nouveux . :)
12 janv. 2012 à 12:34
Une seule question (Pour savoir si je supprime ou non cette source):
- Quel intérêt d'utiliser un boost::shared_array plutôt qu'un std::vector ? Ici, je ne vois pas du tout ce que ça apporte...
À part ça, cette source n'apporte rien de plus que les autres.