Деструктор вызывается, когда я нажимаю на вектор
У меня есть это определение класса:
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;
// ...
}
и его реализация:
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;
// ...
}
Теперь, когда я запускаю этот код:
// ...
vector<FlashStream> _streams;
// ...
_streams.push_back(FlashStream(url, headers, data, _npp.ndata, notifyData, lastModified));
// ...
Иногда у меня возникает ошибка вdelete [] _stream.headers;
в деструктореFlashStream
, который называется, когда яpush_back()
кvector<FlashStream> _streams
.
Я читаюэтот вопрос на ТА и еще несколько, но все равно не знают, как элегантно и эффективно решить проблему. Может быть, проблема в конструкторе копирования, но я не знаю, как я могу сделать это с выделением памяти дляNPStream.headers
а такжеNPStream.url
?