mirror of
https://github.com/pybind/pybind11.git
synced 2024-11-29 08:32:02 +00:00
Avoid local_internals destruction (#4192)
* Avoid local_internals destruction It allows to avoid possible static deinitialization fiasco. * Add link to relevant google style guide discussion
This commit is contained in:
parent
95d0e71a65
commit
f743bdf8e6
@ -514,8 +514,13 @@ struct local_internals {
|
|||||||
|
|
||||||
/// Works like `get_internals`, but for things which are locally registered.
|
/// Works like `get_internals`, but for things which are locally registered.
|
||||||
inline local_internals &get_local_internals() {
|
inline local_internals &get_local_internals() {
|
||||||
static local_internals locals;
|
// Current static can be created in the interpreter finalization routine. If the later will be
|
||||||
return locals;
|
// destroyed in another static variable destructor, creation of this static there will cause
|
||||||
|
// static deinitialization fiasco. In order to avoid it we avoid destruction of the
|
||||||
|
// local_internals static. One can read more about the problem and current solution here:
|
||||||
|
// https://google.github.io/styleguide/cppguide.html#Static_and_Global_Variables
|
||||||
|
static auto *locals = new local_internals();
|
||||||
|
return *locals;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Constructs a std::string with the given arguments, stores it in `internals`, and returns its
|
/// Constructs a std::string with the given arguments, stores it in `internals`, and returns its
|
||||||
|
Loading…
Reference in New Issue
Block a user