Se llama a Destructor cuando presiono el vector
Tengo esta definición de clase:
class FlashStream
{
public:
explicit FlashStream(const char * url, vector<uint8> * headers, vector<uint8> * data, void * ndata, void * notifyData = NULL, uint32 lastModified = NULL);
~FlashStream();
private:
NPStream _stream;
// ...
}
y su implementación:
FlashStream::FlashStream(const char * url, vector<uint8> * headers, vector<uint8> * data, void * ndata, void * notifyData, uint32 lastModified)
{
// ...
memset(&_stream, 0, sizeof(NPStream));
_stream.headers = new char[data->size()];
memcpy((void*)_stream.headers, &(*data)[0], data->size());
// ...
}
FlashStream::~FlashStream()
{
// ...
if(_stream.headers)
delete [] _stream.headers;
_stream.headers = NULL;
// ...
}
Ahora, cuando ejecuto este código:
// ...
vector<FlashStream> _streams;
// ...
_streams.push_back(FlashStream(url, headers, data, _npp.ndata, notifyData, lastModified));
// ...
A veces tengo un error endelete [] _stream.headers;
en el destructor deFlashStream
, que se llama cuando yopush_back()
alvector<FlashStream> _streams
.
Yo leoesta pregunta sobre SO y algunos otros, pero de todos modos no saben cómo solucionar el problema de manera elegante y eficiente. Puede ser que el problema esté en el constructor de copias, pero no sé cómo puedo hacerlo con la asignación de memoria paraNPStream.headers
yNPStream.url
?