Search⌘ K

Passing Smart Pointers

Explore the six essential rules for passing std::unique_ptr and std::shared_ptr in C++. Understand how to transfer ownership, reseat pointers, and manage reference counts to ensure safe and efficient memory handling according to C++ core guidelines.

Passing smart pointers is an important topic that is seldom addressed. This chapter ends with the C++ core guidelines since they have six rules for passing std::shared_ptr and std::unique_ptr.

The Six Rules #

The following six rules violate the important DRY (don’t repeat yourself) principle for software development. In the end, we only have six rules, which makes life as a software developer a lot easier. Here are the rules:

  1. R.32: Take a unique_ptr<widget> parameter to express that a function assumes ownership of a widget.
  2. R.33: Take a unique_ptr<widget>& parameter to express that a function reseats the widget.
  3. R.34: Take a shared_ptr<widget> parameter to express that a function is part owner.
  4. R.35: Take a shared_ptr<widget>&
...