Globale const pointer - wie gefährlich sind sie?
-
Hi, Community!
Ich kann mich ganz blaß erinnern, mit den globalen const-Variablen soll man vorsichtig umgehen, die besser in ein Header packen.
Wie sieht es mit globalen objekten wie shared_ptr und normalen const-pointern aus? Darf man sie in einem .cpp deklarieren und in einem anderen .cpp als extern benutzen?
Es geht um:
const shared_ptr<myObj1>
und
myObj2 * constEs scheint aber zu funktionieren...
Grüße
-
ein sicherheitsrisiko besteht immer. Dürfen vom Sprachstandard her ja - nur wozu solltest du das tun wollen? bzw. was willst du erreichen? (siehe auch Link in meiner sig...) Das kann man häufig durch ein besseres Design völlig vermeiden.
-
pumuckl schrieb:
ein sicherheitsrisiko besteht immer. Dürfen vom Sprachstandard her ja - nur wozu solltest du das tun wollen? bzw. was willst du erreichen? (siehe auch Link in meiner sig...) Das kann man häufig durch ein besseres Design völlig vermeiden.
Ich habe extra in repository-logs nachgeschaut:
Es war mal ein global Objekt myObj1... seit Urzeiten.. dann hat ein netter Mensch daraus myObj * gemacht. Ein andere netter hat const daraus gemacht, weil wahrscheinlich weiter im Code damit iniziiert wird, und wird ja letztendlich nicht mehr verändert, oder so was, weiß ich auch nicht genau. Mein Wunsch war, ein shared_ptr<> daraus zu machen. Das Ding wird kreuz und quer in mehreren Modulen verwendet
Das Leben ist ungerecht...Was soll ich am besten mit dem jetzt machen? Wie soll ich das am besten um-design-ern? Hilft das Umverlagern in ein Header?
Vielen Dank im voraus
Betty
-
Ich verstehe dein Problem nicht. Ändere es halt.
-
hustbaer schrieb:
Ich verstehe dein Problem nicht. Ändere es halt.
Ich verstehe dein Antwort nicht. Was soll ich ändern? In shared_ptr ändern und das wars, oder in ein Header umschieben, oder Kopien von diesem Objekt zwischen den Modulen hin und her weitergeben...
Ich bin mir nicht sicher, daß globale const shared_ptr beim Linken nicht einfach copiert werden, und dann habe ich in jedem Modul eine selbständige Kopie?
Kenne ich mich eben nicht aus, hilft mir bitte, wer sich auskennt...
Ich habe wenig Lust ganzen Code durchlesen und suchen, warum es const ist. Oder kann man jetzt im nachhinein nicht const machen, kann nix pasieren?
-
mach im Zweifelsfall erstmal ein singleton draus und schau dann ob du das ding wirklich in sooo vielen Modulen brauchst. oft kann man sowas einmal dem Modul als Parameter übergeben und das Objekt selber in einem übergeordneten Modul erstellen und leben lassen, natürlich vorausgesetzt dass die anderen Module nicht länger leben.
-
pumuckl schrieb:
mach im Zweifelsfall erstmal ein singleton draus und schau dann ob du das ding wirklich in sooo vielen Modulen brauchst. oft kann man sowas einmal dem Modul als Parameter übergeben und das Objekt selber in einem übergeordneten Modul erstellen und leben lassen, natürlich vorausgesetzt dass die anderen Module nicht länger leben.
Danke für den Tipp
Ich habe schon irgendwie so was vermutet, werde auch so tun, der sicherste Weg ist es auf jeden Fall.
Grüße
Betty
-
Hier habe ich ein paar Probleme von globalen Variablen erläutert. Wenn du interessiert bist, kannst du dir den Thread mal anschauen.