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

  • VS Code Java Team Details 5 Best Dev Practices

    Microsoft's Visual Studio Code team for Java development added a new Coding Pack for Java installer and detailed best practices for setting up a development environment.

  • Binary Classification Using PyTorch: Defining a Network

    Dr. James McCaffrey of Microsoft Research tackles how to define a network in the second of a series of four articles that present a complete end-to-end production-quality example of binary classification using a PyTorch neural network, including a full Python code sample and data files.

  • Blazor Debugging Boosted in .NET 5 RC 2

    In highlighting updates to ASP.NET Core in the just-launched second and final Release Candidate of .NET 5, Microsoft pointed out better debugging for Blazor, the red-hot project that allows for C# coding of web projects.

  • Block Stack

    Final Go-Live .NET 5 Release Candidate Ships Ahead of Nov. 10 Debut

    Having been deemed "feature complete" and "near final" and "go live" for some time now, .NET 5 is out in a second and final Release Candidate, scheduled for a Nov. 10 debut during .NET Conf 2020.

  • Edge Browser Dev Tools for VS Code Now Generally Available

    Microsoft has moved its Edge browser development tools for Visual Studio Code from preview to general availability, providing in-editor web site debugging and other functionality.

Upcoming Events