33 lines
1.3 KiB
ReStructuredText
33 lines
1.3 KiB
ReStructuredText
|
.. title:: clang-tidy - readability-reference-to-constructed-temporary
|
||
|
|
||
|
readability-reference-to-constructed-temporary
|
||
|
==============================================
|
||
|
|
||
|
Detects C++ code where a reference variable is used to extend the lifetime of
|
||
|
a temporary object that has just been constructed.
|
||
|
|
||
|
This construction is often the result of multiple code refactorings or a lack
|
||
|
of developer knowledge, leading to confusion or subtle bugs. In most cases,
|
||
|
what the developer really wanted to do is create a new variable rather than
|
||
|
extending the lifetime of a temporary object.
|
||
|
|
||
|
Examples of problematic code include:
|
||
|
|
||
|
.. code-block:: c++
|
||
|
|
||
|
const std::string& str("hello");
|
||
|
|
||
|
struct Point { int x; int y; };
|
||
|
const Point& p = { 1, 2 };
|
||
|
|
||
|
In the first example, a ``const std::string&`` reference variable ``str`` is
|
||
|
assigned a temporary object created by the ``std::string("hello")``
|
||
|
constructor. In the second example, a ``const Point&`` reference variable ``p``
|
||
|
is assigned an object that is constructed from an initializer list ``{ 1, 2 }``.
|
||
|
Both of these examples extend the lifetime of the temporary object to the
|
||
|
lifetime of the reference variable, which can make it difficult to reason about
|
||
|
and may lead to subtle bugs or misunderstanding.
|
||
|
|
||
|
To avoid these issues, it is recommended to change the reference variable to a
|
||
|
(``const``) value variable.
|