when throwing an exception using a dynamic object E.g.
throw new MyErrObj( MyErrCode );
that only needs to stay in memory until a catch handler decides it can deal with the exception then deletes it.
if using pointers to dynamic data I reccomend using the set_unexpected function to ensure you delete the data incase no handler 'handles' the exception.
you could implement a static Error log that records the details of each throw, so when an exception occours you can use something like
throw MyErrorLog += "This error information.";
There could be any number of reasons, these are just examples of what i have used.
Also implementations may limit the use, aggregate structures that cannot have their contents copied due to the semantics of the data can't be passed by value ( compiler wont stop you though ).
CRT objects can't be accessed correctly across boundaries that aren't linked staticly with different versions. ( could be wrong but I remember I had issues once ).