referenzen & klassen
-
ho!
es geht mir jetzt nicht um den const pointer, sondern wollte da:Secret *ptr_s = new Secret("codename_matrix"); oo *ptr_f = new Foo;
mal mit referenzen auf ein objekt arbeiten...manchmal kann man ja sowas auch gebrauchen? könntest dann mal zeigen was man ändern muss?
cu
-
nachwuchscoder schrieb:
mal mit referenzen auf ein objekt arbeiten...manchmal kann man ja sowas auch gebrauchen? könntest dann mal zeigen was man ändern muss?
bestimmt
#include <memory> #include <string> #include <iostream> class Secret { private: std::string wepkey; public: Secret(const char *set_wepkey) : wepkey(set_wepkey) { } const char *get_wepkey() const { return wepkey.c_str(); } }; class Foo { private: const Secret &refSecret; // ConstReference auf Secret public: Foo(const Secret &refSecret) : refSecret(refSecret) { } const char *getwepkeyInstance() /*!!!*/const { return refSecret.get_wepkey(); } }; int main() { Secret s("codename_matrix"); Foo f(s); std::cout << f.getwepkeyInstance() << std::endl; return 0; }
-
nachwuchscoder schrieb:
ho!
es geht mir jetzt nicht um den const pointer, sondern wollte da:Secret *ptr_s = new Secret("codename_matrix"); oo *ptr_f = new Foo;
mal mit referenzen auf ein objekt arbeiten...
new liefert einen Zeiger, und Zeiger!=Referenz
lösung mit auto_ptr wurde schon genannt
-
nach deiner aussage, dürfte das ja nie funktionieren?
Secret &ref_s = new Secret("codename_matrix"); oder Secret &ref_s = Secret("codename_matrix");
cu
-
Secret &ref_s = *new Secret("codename_matrix");
gehört wohl so! macht sowas denn sinn?
cu
-
Secret &ref_s = new Secret("codename_matrix");
Erzeugt augenscheinlich ne Speicherleiche.
-
class Secret { private: char wepkey[100]; public: Secret(const char *set_wepkey) { memset(&wepkey, 0, sizeof(wepkey)); strcpy(wepkey,set_wepkey); } const char *get_wepkey() const { return wepkey; } }; class Foo { private: const Secret *ptr_Secret; // ConstPointer auf Secret public: void setInstance(const Secret *ptr) { ptr_Secret = ptr; } const char *getwepkeyInstance() const { return ptr_Secret->get_wepkey(); } }; int main() { // Referenz auf Instanz ptr_s Secret &ptr_s = Secret("codename_matrix"); // Referenz auf Instanz ptr_f Foo &ptr_f = Foo(); ptr_f.setInstance(&ptr_s); std::cout << ptr_f.getwepkeyInstance() << std::endl; std::cin.get(); return 0; }
was sagen die gurus dazu??
cu
-
nachwuchscoder schrieb:
//UB!!! initial value of reference to non-const must be an lvalue Secret &ptr_s = Secret("codename_matrix"); //UB!!! initial value of reference to non-const must be an lvalue Foo &ptr_f = Foo(); //UB!!! ptr_f.setInstance(&ptr_s); //UB!!! std::cout << ptr_f.getwepkeyInstance() << std::endl;
was sagen die gurus dazu??
undefined behavior
cu
-
ja....aber der code läuft...keinen error, keine exception!! bist nun platt was?
cu
-
nachwuchscoder schrieb:
ja....aber der code läuft...keinen error, keine exception!! bist nun platt was?
cu
Undefined behavior indicates that an implementation may behave unpredictably when a program reaches a certain state, which almost without exception is a result of a bug. Undefined behavior can be manifested as a run time crash, unstable and unreliable program state, or--in rare cases--it may even pass unnoticed. Examples of undefined behaviors include an attempt to write to a buffer past its boundary, accessing an out of range array subscript, de-referencing a dangling pointer or deleting a non-NULL pointer more than once.
Undefined behavior means that ANYTHING can happen! If you write i=i++, your computer can teleport itself to 16th century Wittenberg and change Western history by nailing sections 1.6 and 3.3 of ANSI X3.159 to the church door!