Obwohl mein Code gut kompiliert ist, hat mich das etwas gestört, und ich konnte keine Antwort auf Stackoverflow finden. Der folgende generische Konstruktor ist eine Möglichkeit, eine shared_ptr an eine Klasseninstanz im Konstruktor zu übergeben.Warum wird beim Kopieren eines const shared_ptr & const-ness nicht verletzt?
MyClass {
MyClass(const std::shared_ptr<const T>& pt);
std::shared_ptr<const T> pt_; //EDITED: Removed & typo
};
MyClass::MyClass(const std::shared_ptr<const T>& pt)
: pt_(pt)
{ }
Dies kompiliert gut. Meine Frage ist die folgende: In meinem Verständnis, einen Parameter const wie folgt deklarieren:
void myfunc(const T& t)
verspricht, nicht t zu ändern. Kopiere ich jedoch die shared_ptr pt zu pt_, steige ich nicht effektiv auf die Verwendungszählung von shared_ptr pt und verletze damit die angenommene const-ness?
Dies könnte ein grundlegendes Missverständnis von shared_ptrs auf meiner Seite sein?
(Für alle, die dies lesen, sie umzusetzen suchen, beachten Sie, dass this könnte eine bessere Umsetzung sein)
@LogicStuff: Wenn du extra und in der Klassendefinition meintest, habe ich meinen Beitrag bearbeitet. Aber die Konstruktordefinition kompiliert gut? – Thomas
@Thomas Nun, da es ein 'const' Objekt nicht an einen Verweis-zu-nicht-const bindet, ja. – LogicStuff
@MichaelBurr bearbeitet, ich schätze, du hast dich auch auf meinen Tippfehler in der Deklaration von pt_ bezogen, tut mir leid. – Thomas