Michele Caini 7 سال پیش
والد
کامیت
7047d12eba
1فایلهای تغییر یافته به همراه19 افزوده شده و 4 حذف شده
  1. 19 4
      docs/entity.md

+ 19 - 4
docs/entity.md

@@ -1178,7 +1178,7 @@ Similarly, the `each` member functions will propagate constness to the type of
 the components returned during iterations:
 the components returned during iterations:
 
 
 ```cpp
 ```cpp
-view.each([](const auto entity, position &pos, const velocity &vel) {
+view.each([](auto entity, position &pos, const velocity &vel) {
     // ...
     // ...
 });
 });
 ```
 ```
@@ -1241,9 +1241,24 @@ during iterations.<br/>
   iterations. For all the other entities, destroying them or removing their
   iterations. For all the other entities, destroying them or removing their
   components isn't allowed and can result in undefined behavior.
   components isn't allowed and can result in undefined behavior.
 
 
-Iterators are invalidated and the behavior is undefined if an entity is modified
-or destroyed and it's not the one currently returned by the iterator nor a newly
-created one.<br/>
+In these cases, iterators aren't invalidated. To be clear, it doesn't mean that
+also references will continue to be valid. Consider the following example:
+
+```cpp
+registry.view<position>([&](auto entity, auto &pos) {
+    registry.assign<position>(registry.create(), 0., 0.);
+    position.x = 0.; // warning: dangling pointer
+});
+```
+
+The `each` member function won't break (because iterators aren't invalidated)
+but there are no guarantees on references. Use a common range-for loop and get
+components directly from the view or move the creation of components at the end
+of the function to avoid dangling pointers.
+
+Iterators are invalidated instead and the behavior is undefined if an entity is
+modified or destroyed and it's not the one currently returned by the iterator
+nor a newly created one.<br/>
 To work around it, possible approaches are:
 To work around it, possible approaches are:
 
 
 * Store aside the entities and the components to be removed and perform the
 * Store aside the entities and the components to be removed and perform the