clang-tidy error mbt std::deque & std::unique_ptr

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • xces
  • Registratie: Juli 2001
  • Laatst online: 29-09 11:14

xces

To got or not to got..

Topicstarter
Mijn vraag
Ik heb een PR geopend voor ESPHome zodat ik mijn zwembad controller kan afmaken. Hiervoor moet ik een bestaand sensor component van EZO uitbreiden met nieuwe commando's.

Op 1 na gaan alle checks goed, maar bij 1 check geeft clang-tidy op diverse plekken nog een opmerking die ik dmv het Discord kanaal van EspHome heb kunnen vertalen naar "Je moet unique_ptr gebruiken". Helaas is de PR niet oorspronkelijk door mij gemaakt en is mijn kennis van C++ dermate slecht (zeker met pointers) dat ik niet veel verder kom. Zou er iemand met mij mee kunnen kijken en evt een oplossing aandragen?

Wat ik al gevonden of geprobeerd heb
Diverse andere implementaties geprobeerd, via Discord de developers gevraagd wat de clang error betekend maar zonder succes.

Wat ik wil bereiken:
Ik heb een queue met commando's die in sequentie moet worden uitgevoerd. Deze declareer ik hier als volgt:
std::deque<EzoCommand *> commands_;
In de loop() kijk ik of het commando wat we nu aan het uitvoeren een READ is, en zo niet dan wil ik dat na het huidige commando een read word uitgevoerd, dat zit hier en probeer ik dus op positie 2 een nieuw commando te injecteren.

Dit werkt op andere platformen maar niet op de ESP32.. Als iemand met mij mee kan kijken zou dat heel fijn zijn.

Beste antwoord (via xces op 15-06-2022 21:01)


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 27-09 13:03
Rmg schreef op woensdag 15 juni 2022 @ 10:06:
Dit werkt wel alleen is een bad habit (volgens de clang-tidy ruleset)

Hier staat je probleem beschreven
https://clang.llvm.org/ex...elines-owning-memory.html

code:
1
std::unique_ptr<EzoCommand > commands_;
is zo uit mn hoofd hoe je je ptr moet gaan declareren. Het voordeel van smart pointers is dat ze zichzelf opruimen
Ehm, dat is geen aternatief voor:
C++:
1
std::deque<EzoCommand*> commands_;


Dan zou je eerder een :
C++:
1
std::deque<std::unique_ptr<EzoCommand>> commands_;

willen. Dat heeft echter wel gevolgen voor het gebruik van die pointers.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.

Alle reacties


Acties:
  • +1 Henk 'm!

  • Rmg
  • Registratie: November 2003
  • Laatst online: 10:33

Rmg

Dit werkt wel alleen is een bad habit (volgens de clang-tidy ruleset)

Hier staat je probleem beschreven
https://clang.llvm.org/ex...elines-owning-memory.html

code:
1
std::unique_ptr<EzoCommand > commands_;
is zo uit mn hoofd hoe je je ptr moet gaan declareren. Het voordeel van smart pointers is dat ze zichzelf opruimen

Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 27-09 13:03
Rmg schreef op woensdag 15 juni 2022 @ 10:06:
Dit werkt wel alleen is een bad habit (volgens de clang-tidy ruleset)

Hier staat je probleem beschreven
https://clang.llvm.org/ex...elines-owning-memory.html

code:
1
std::unique_ptr<EzoCommand > commands_;
is zo uit mn hoofd hoe je je ptr moet gaan declareren. Het voordeel van smart pointers is dat ze zichzelf opruimen
Ehm, dat is geen aternatief voor:
C++:
1
std::deque<EzoCommand*> commands_;


Dan zou je eerder een :
C++:
1
std::deque<std::unique_ptr<EzoCommand>> commands_;

willen. Dat heeft echter wel gevolgen voor het gebruik van die pointers.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.