Megosztás:


Figyelmeztetés C26445

Ne rendeljen hozzá gsl::span vagy std::string_view adjon hozzá hivatkozást. Ezek olcsók, és nem tulajdonosai a mögöttes adatoknak. (gsl.view)

Egy életre vonatkozó probléma hivatkozása gsl::span vagy std::string_view jelzése lehet.

C++ alapvető irányelvek

GSL.view: Nézetek

Ez a szabály a standard tárolókból az új span- és nézettípusokba migrált kódban előforduló apró élettartam-problémákat rögzíti. Az ilyen típusok "pufferekre mutató hivatkozásoknak" tekinthetők. Egy spanra vagy nézetre mutató hivatkozással további indirekt réteg jön létre. Az ilyen közvetettség gyakran szükségtelen, és zavaró lehet a karbantartók számára. A spanok másolása olcsó, és függvényhívásokból származó érték alapján adható vissza. Nyilvánvaló, hogy az ilyen hívás eredményeire soha nem kell hivatkozni.

Megjegyzések

  • A szabály a gsl::span<>, gsl::basic_string_span<> és std::basic_string_view<> hivatkozásokat észlel (beleértve a példányok aliasait is).
  • Jelenleg csak deklarációk és visszatérési utasítások esetén jelenik meg figyelmeztetés. Ez a szabály a jövőben kiterjeszthető a függvényparaméterek megjelölésére is.
  • A szabály végrehajtása egyszerű, és nem kísérli meg nyomon követni a tényleges élettartamokat. A hivatkozások használata bizonyos esetekben még mindig értelmes lehet. Ilyen esetekben a hamis pozitív értékek biztonságosan elfojthatók.

Kódelemzés neve: NO_SPAN_REF.

példa

Hivatkozás ideiglenesre:

// Old API - uses string reference to avoid data copy.
const std::string& get_working_directory() noexcept;

// New API - after migration to C++17 it uses string view.
std::string_view get_working_directory() noexcept;

// ...
// Client code which places an explicit reference in a declaration with auto specifier.
const auto &wd = get_working_directory(); // C26445 after API update.