Destruktor wird aufgerufen, wenn ich zum Vektor zurückschiebe

Ich habe diese Klassendefinition:

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

(NPStream Beschreibung)

und ihre Umsetzung:

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

Nun, wenn ich diesen Code ausführe:

// ...
vector<FlashStream> _streams;
// ...
_streams.push_back(FlashStream(url, headers, data, _npp.ndata, notifyData, lastModified));
// ...

Manchmal habe ich einen Fehler beidelete [] _stream.headers; im Destruktor vonFlashStream, das heißt wenn ichpush_back() zumvector<FlashStream> _streams.

ich leseDiese Frage zu SO und ein paar andere, wissen aber nicht, wie man das Problem elegant und effizient behebt. Möglicherweise liegt das Problem im Kopierkonstruktor, aber ich weiß nicht, wie ich es mit der Speicherzuweisung für machen kannNPStream.headers undNPStream.url?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage