Passing Smart Pointers
In this lesson, we will discuss the rules regarding passing smart pointers.
We'll cover the following
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:
- R.32: Take a
unique_ptr<widget>
parameter to express that a function assumes ownership of a widget. - R.33: Take a
unique_ptr<widget>&
parameter to express that a function reseats the widget. - R.34: Take a
shared_ptr<widget>
parameter to express that a function is part owner. - R.35: Take a
shared_ptr<widget>&
parameter to express that a function might reseat the shared pointer. - R.36: Take a const
shared_ptr<widget>&
parameter to express that it might retain a reference count to the object. - R.37: Do not pass a pointer or reference obtained from an aliased smart pointer.