Domanda

Ho uno shared_array: boost :: myarr shared_array (new char [m_length]);

Vorrei allocare la matrice. Ho pensato di creare una nuova shared_array con la dimensione voluta e utilizzando il metodo spinta di swap, ma questo copierà il conteggio referance pure. Hai un'altra idea?

//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);
}
È stato utile?

Soluzione

Perché non basta invece utilizzare un boost::shared_ptr<std::vector<char> >? Lasciate che lo standard maniglia ridimensionamento biblioteca.

(In realtà, a seconda del motivo si stava utilizzando shared_array, in primo luogo, si potrebbe anche uscire solo con utilizzando uno std :: vector, e passando in giro per riferimento con attenzione.)

Altri suggerimenti

boost :: :: shared_array ripristino dovrebbe fare il trucco

myarr.reset(new char[new_length]);

boost :: :: shared_array Reset cancella il vecchio array allocato, scambiando con quello appena allocato.

Modifica: Ignorare questa risposta, non risolve il suo problema

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top