Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
Export (0) Print
Expand All

Objects Own Resources (RAII)

Make sure that objects own resources. This principle is also known as “resource acquisition is initialization” or “RAII.”

Pass every “new” object as a constructor argument to another named object that owns it (almost always unique_ptr).

void f() {
  unique_ptr<widget> p( new widget(…) );
  my_class x( new widget() );
} // automatic destruction and deallocation for both widget objects
  // automatic exception safety, as if “finally { p->dispose(); x.w.dispose(); }”

Always immediately pass any new resource to another object that owns it.

void g() {
  other_class y( OpenFile() );
} // automatic closing and release for file resource
  // automatic exception safety, as if “finally { y.file.dispose(); }”

Community Additions

© 2015 Microsoft