Je voulais juste avoir une nouvelle paire d'yeux que le code ci-dessous est correct en ce que:boost :: sémantique shared_ptr (copie)
Les pointeurs contenus dans le trifoo d'objet (stocké dans un ptr_vector) sont Partagée pointeurs f, g, h.
Aussi, quel est le résultat de la copie shared_ptr dans le constructeur de trifoo; est-ce la méthode correcte de 'partage' shared_ptr, en veillant à ce que le nombre de références soit augmenté etc. Tous mes autres doutes ont pu être vérifiés, mais je ne suis pas sûr de pouvoir vérifier cela (correctement). Toute critique est la bienvenue aussi.
#include <boost/ptr_container/ptr_vector.hpp>
#include <boost/shared_ptr.hpp>
class foo {
int a, b;
public:
foo(int A, int B) : a(A), b(B) {}
};
typedef boost::shared_ptr<foo> foo_ptr;
class trifoo {
foo_ptr c, d, e;
public:
trifoo(const foo_ptr& C, const foo_ptr& D, const foo_ptr& E) : c(C), d(D), e(E) {}
};
int main() {
for (int i = 0; i < 5000000; i++) {
foo_ptr f(new foo(1,2));
foo_ptr g(new foo(2,3));
foo_ptr h(new foo(4,5));
boost::ptr_vector<trifoo> tris;
tris.push_back(new trifoo(f, g, h));
}
return 0;
}
Remarque: la boucle inutile consistait à tester les fuites de mémoire, dont aucune ne s'est produite.
semble bien pour moi. Cependant, vous devriez préférer une liste d'initialisation à assignation, et votre vecteur 'tris' n'aura jamais qu'un seul élément, vous vouliez probablement que cela soit hors de la boucle. – GManNickG
C'était simplement pour tester les capacités d'un ptr_vector, cette implémentation n'est pas pour une application pratique - et merci. – dcousens