2010-12-06 9 views
0

Ich habe eine shared_array: boost :: shared_array myarr (neue char [m_length]);boost :: shared_array neu zuweisen

Ich möchte das Array neu zuordnen. Ich dachte daran, ein neues shared_array mit der gewünschten Größe zu erstellen und die Swap-Boost-Methode zu verwenden, aber das wird auch die Reference-Anzahl kopieren. Haben Sie eine andere Idee?

//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); 
} 

Antwort

2

Warum ein boost::shared_ptr<std::vector<char> > verwenden nur statt nicht? Lassen Sie die Standardbibliothek die Größenänderung übernehmen.

(In der Tat, je nachdem, warum Sie shared_array in erster Linie verwendet haben, Sie gut weg bekommen könnte mit nur einem std :: vector verwenden und es sich um sorgfältig durch Verweis übergeben.)

+0

Ich möchte sicherstellen, dass der Inhalt nicht nach Wert kopiert wird. Deshalb benutze ich shared_array. Wie ist die Leistung von boost :: shared_ptr :: vector Tal

+0

Ein shared_ptr zu einem Vektor wird wahrscheinlich eine zusätzliche Ebene der Indirektion, aber ansonsten ist alles so sauber wie möglich - die Daten sind zusammenhängend. Wenn Sie nur das Kopieren verhindern möchten, können Sie einfach eine Klasse erstellen, die von boost :: noncopyable erbt, ein std :: vector member haben und die gewünschte Schnittstelle verfügbar machen. –

1

boost :: shared_array :: Reset sollte der

myarr.reset(new char[new_length]); 

Boost-Trick :: shared_array :: Reset die alte zugeordnete Array löscht, ist es mit dem neu zugewiesenen ein Swapping.

Edit: Ignorieren Sie diese Antwort, es löst nicht sein Problem

+1

Hält es die Referenzzähler des alten? Kopiert es den Wert des Arrays auf den neuen? Ich brauche den gleichen Wert, aber in einem größeren Array. – Tal

+1

Vergesst, ich habe die Frage falsch verstanden. Ignoriere – tyree731

Verwandte Themen