OVH Cloud OVH Cloud

Vecteurs et objets Dynamiques

2 réponses
Avatar
Jérôme
Bonjour à tous,

Peut-on utiliser des vecteurs contenant des objets dont certaines
parties sont allouées Dynamiquement, cad dont on ne peut connaître à
l'avance la place occupée en mémoire ?

J'ai un cas qui passe en utilisant un vecteur d'objets dynamiques
(peut-être avec de la chance, qui sait), et un cas qui ne passe pas.

Voici celui qui ne passe pas, où je fais un vecteur d'objets Rubrique
(j'épure pour alléger) :

***

typedef vector<Rubrique> vecteurrubriques; // définition d'un type
de vecteurs pour les rubriques

class ListeRubrique {

protected : // seules les classes dérivées
pourront utiliser ces champs
...
vecteurrubriques rubrique; // Liste des rubriques, un
tableau d'objets "Rubrique"
...
public :
...
};

***
pour info, ma classe Rubrique :

typedef vector<Dynachar> vecteurdynachar; // définition d'un type
de vecteur de Dynachar

class Rubrique {

protected : //seules les classes dérivées
pourront utiliser ces champs
...
vecteurdynachar lignerubrique; // Contenu des lignes, un tableau de
Dynachar
...
public :
Rubrique(); // constructeur vide
Rubrique(Dynachar); // constructeur à partir d'un
Dynachar qui n'englobe que la rubrique
~Rubrique(){}; // destructeur vide (le vecteur
sera chargé de désallouer les lignes)
...
};

***
Et pour info, ma classe Dynachar est une classe de chaîne dynamique, un
peu comme String, une liste simplement chaînée, qui marche très bien par
ailleurs, y compris quand je fais un vecteur de Dynachar.

Dans mon constructeur de ListeRubriques, je fais un :

rubrique.resize(nbrubriques)

et j'obtiens un core dumped précisément à cette opération. Est-ce parce
que j'emboîte 2 vecteurs quand je fais un vecteur de Rubrique qui, dans
Rubrique, contient un vecteur de Dynachar ?

Jérôme.

2 réponses

Avatar
Falk Tannhäuser
Jérôme wrote:
Et pour info, ma classe Dynachar est une classe de chaîne dynamique, un
peu comme String, une liste simplement chaînée, qui marche très bien par
ailleurs, y compris quand je fais un vecteur de Dynachar.

Dans mon constructeur de ListeRubriques, je fais un :

rubrique.resize(nbrubriques)

et j'obtiens un core dumped précisément à cette opération. Est-ce parce
que j'emboîte 2 vecteurs quand je fais un vecteur de Rubrique qui, dans
Rubrique, contient un vecteur de Dynachar ?


La classe Dynachar possède-t-elle un constructeur de copie et un
opérateur d'affectation qui marchent correctement ?

Avatar
Jérôme
Et pour info, ma classe Dynachar est une classe de chaîne dynamique,
un peu comme String, une liste simplement chaînée, qui marche très
bien par ailleurs, y compris quand je fais un vecteur de Dynachar.

Dans mon constructeur de ListeRubriques, je fais un :

rubrique.resize(nbrubriques)

et j'obtiens un core dumped précisément à cette opération. Est-ce
parce que j'emboîte 2 vecteurs quand je fais un vecteur de Rubrique
qui, dans Rubrique, contient un vecteur de Dynachar ?



La classe Dynachar possède-t-elle un constructeur de copie et un
opérateur d'affectation qui marchent correctement ?


Oui, et notamment un constructeur par recopie, elle a même un opérateur
= surchargé, enfin tout ce qui va bien, elle marche depuis des années,
et elle est aussi sûre que la classe String. J'avais justement bien fait
attention aux constructeurs et aux destructeurs.