X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/7b138f8b1ed3e8816eda5cb26deb71fe81b4087a..e5606f7a38a24e81575b50fbf962486aeff9ac67:/doc/doxygen/module-s4u.doc diff --git a/doc/doxygen/module-s4u.doc b/doc/doxygen/module-s4u.doc index 324edb0fcc..7ee18cfaae 100644 --- a/doc/doxygen/module-s4u.doc +++ b/doc/doxygen/module-s4u.doc @@ -10,9 +10,33 @@ SimGrid will be possible in S4U. that path unless you know what you are doing. If unsure, proceed to @ref MSG_API instead. - Unsurprisingly, the S4U interface matches the concepts presented in @ref starting_components "the introduction". You should read this page -first, to not get lost in the amount of classes provided here. +first, to not get lost in the amount of classes provided here. Or you +could jump to the \ref s4u_examples directly if you prefer. + +@section s4u_raii Memory Management of S4U objects + +For sake of simplicity, we use +[RAII](https://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization) +everywhere in S4U. This is an idiom where resources are automatically +managed through the context. Provided that you never manipulate +objects of type Foo directly but always FooPtr references (which are +[boost::intrusive_ptr](http://www.boost.org/doc/libs/1_61_0/libs/smart_ptr/intrusive_ptr.html)<Foo>), +you will never have to explicitely release the resource that you use +nor to free the memory of unused objects. + +Here is a little example: + +@code{cpp} +void myFunc() +{ + simgrid::s4u::MutexPtr mutex = simgrid::s4u::Mutex::createMutex(); // Too bad we cannot use `new` here + mutex->lock(); // use the mutex as a simple reference + // bla bla + mutex->unlock(); + +} // The mutex will get automatically freed because the only existing reference gets out of scope +@endcode */