Resource Management in C++: Listing 5

A mediator resource_access_object applying the RAII idiom.

// resource_access_object.hpp
#include <memory>
#include "shared_resource.hpp"

// RAII-styled object to handle access to the shared resource
class resource_access_object {
public:
  resource_access_object();

  // no copy constructor: either use same object or create new.
  resource_access_object(const resource_access_object&) = delete;

  ~resource_access_object();

  void do_alpha();
  void do_beta();
private:
  std::unique_ptr<shared_resource> resource_;
};


// resource_access_object.cpp
#include "resource_access_object.hpp"

resource_access_object() : resource_{create_resource()}
{
  cout << "RAII over resource " << resource_->id << " built.\n";
}

~resource_access_object() {
  // a call to shut_suffices here. As resource_ is a unique_ptr, will
  // free its pointer.
  shut_resource(resource_.get());
  cout << "RAII over resource " << resource_->id << " destroyed.\n";
}

void do_alpha()
{
  cout << "RAII over resource " << resource_->id << " doing <alpha>.\n";
  do_alpha_with_resource(resource_.get());
}

void do_beta()
{
  cout << "RAII over resource " << resource_->id << " doing <beta>.\n";
  do_beta_with_resource(resource_.get());
}

About the Author

Diego Dagum is a software architect and developer with more than 20 years of experience. He can be reached at [email protected]

comments powered by Disqus

Featured

  • Vendors Update Controls for .NET Core 3.1, Blazor

    This week saw two third-party vendors of dev tools -- UX and UI toolkits and controls -- release new offerings that include support for two of Microsoft's main open source frameworks, the cross-platform .NET Core 3.1 and Blazor, which allows for creating browser-based web applications with C# instead of JavaScript.

  • C++ Is Focus of New Visual Studio 2019 v16.7 Preview 2

    C++ development is a focus point of the new Visual Studio 2019 v16.7 Preview 2, featuring a slew of tweaks and improvements touching upon remote SSH connections, IntelliSense support and more.

  • Clustering Non-Numeric Data Using C#

    Clustering non-numeric -- or categorial -- data is surprisingly difficult, but it's explained here by resident data scientist Dr. James McCaffrey of Microsoft Research, who provides all the code you need for a complete system using an algorithm based on a metric called category utility (CU), a measure how much information you gain by clustering.

  • So What's Up with Microsoft's (and Everyone Else's) Love of Rust?

    Microsoft already stewards several popular programming languages -- C#, TypeScript, F# -- so what's up with its love of Rust, along with the rest of the world?

  • C# Steps Up Programming Language Popularity Ladder

    Microsoft's C# programming language climbed a year-over-year notch on the TIOBE Index, which measures popularity among developers.

.NET Insight

Sign up for our newsletter.

Terms and Privacy Policy consent

I agree to this site's Privacy Policy.

Upcoming Events