Question

J'ai un shared_array: boost :: shared_array myarr (nouveau char [m_length]);

Je voudrais réattribuer le tableau. Je pensais à la création d'une nouvelle shared_array avec la taille voulu et en utilisant la méthode d'amplification d'échange mais cela copiera le nombre de referance ainsi. Avez-vous une autre idée?

//new_length>m_length
void func(boost::shared_array<char> &myarr,int new_length)
{
       boost::shared_array<char> new_arr(new char[new_length]);
       myarr.swap(new_arr);
}
Était-ce utile?

La solution

Pourquoi ne pas utiliser juste la place d'un boost::shared_ptr<std::vector<char> >? Laissez le redimensionnement de la poignée bibliothèque standard.

(En fait, selon la raison pour laquelle vous utilisiez shared_array en premier lieu, vous pourriez bien vous en sortir avec juste en utilisant un std :: vecteur, et en passant par référence soigneusement autour.)

Autres conseils

boost :: shared_array :: reset devrait faire l'affaire

myarr.reset(new char[new_length]);

boost :: shared_array :: reset supprime l'ancien tableau alloué, en échangeant avec celui nouvellement attribué.

Edit: Ignorer cette réponse, il ne résout pas son problème

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top