Published: 2007-01-10
Let’s say you have the following unmanaged code:
#pragma unmanaged
class Stream { ... }; // Conceptual stream class
class StreamWriter
{
public:
StreamWriter(Stream* pStream) : m_pStream(pStream) {}
~StreamWriter() { /* Use m_pStream in some way */ }
...
private:
Stream* m_pStream;
};
void f()
{
Stream stream;
StreamWriter streamWriter(&stream);
// Use streamWriter
// streamWriter is destroyed
// stream is destroyed
}
Note that StreamWriter’s destructor uses m_pStream (perhaps by flushing the stream). This means that the order of destruction is important — StreamWriter must be destroyed before its underlying Stream is.