Jetant C++ exceptions au-delà des limites de la DLL

J'ai lu différentes choses sur la façon dont il ne faut pas allouer de mémoire de tas dans une DLL et de libérer de l'extérieur de cette DLL. Mais qu'en jetant un objet d'exception qui est un juste un temporaire (comme la plupart des objets d'exception sont)? E. g.:

throw my_exception( args ); //temporary: no heap allocation

Lorsque l'objet de l'exception est capturé en dehors de la DLL, le destructeur de l'objet sera finalement exécuté et la non-mémoire dans la mémoire de l'objet sera remis en état. Est-ce que ça puisque ce n'est pas un segment de mémoire?

  • L'exception que vous jeter n'est pas une exception vous de capture; une copie est faite le long du chemin. Cela dit, je ne sais pas où la copie réside ou comment sa détruit.
  • Est-ce encore le cas lorsque l'exception est interceptée par référence? Avez-vous une source?
  • Autant que je sache, C++ nécessite qu'une exception ont un public très accessible en terme de constructeur de copie, mais c'est à une mise en œuvre que de l'utiliser pour faire des copies. Il peut très bien être le même objet qui est pris.
  • De N3225, 15.1 Throwing an exception, 3: A throw-expression initializes a temporary object..., 5: The memory for the exception object is allocated in an unspecified way... @Paul: 5: When the thrown object is a class object, the copy/move constructor and the destructor shall be accessible, even if the copy/move operation is elided
  • De N3225, 15.3 Handling an exception 16: The object declared in an exception-declaration or, if the exception-declaration does not specify a name, a temporary (12.2) is copy-initialized (8.5) from the exception object... 17: ...When the handler declares a reference to a non-constant object, any changes to the referenced object are changes to the temporary object initialized when the throw-expression was executed and will have effect should that object be rethrown.
  • théoriquement, il pourrait être possible d'utiliser la même copie, mais pratiquement l'objet cesse d'exister en tant que la pile est déroulée.
  • Merci, c'est exactement ce que je me demandais.