Ist die folgende Wrapper-Klasse einer „OK“ Art und Weise ein Zwischenobjekt mit std::unique_ptr
zu halten, ohne das Kopieren me
das me
Mitglied zugreifen?Wenn rvalue Destruktor aufgerufen/ist dies ok
Hier ist das Beispiel
#include <iostream>
#include <memory>
/* myobj from another library */
class myobj {
public:
std::string me; /* actual member of interest is larger and more
complicated. Don't want to copy of me or myobj */
/* more members in actual class */
myobj(std::string i_am) {
/* more stuff happens in constructor */
me = i_am;
}
~myobj(){
std::cout << me << ": Goodbye" << std::endl;
}
};
/* A function in another library */
void who_is_this(std::string *who){
std::cout << "This is " << *who << std::endl;
}
/* wrapper which I define */
class myobj_wrapper {
using obj_ptr = std::unique_ptr<myobj>;
obj_ptr ptr;
public:
std::string *who;
myobj_wrapper(std::string i_am):
ptr(new myobj(i_am)), who(&ptr.get()->me) {}
myobj_wrapper(myobj &the_obj): who(&the_obj.me) { }
};
int main()
{
{
myobj bob("Bob");
who_is_this(myobj_wrapper(bob).who);
}
who_is_this(myobj_wrapper("Alice").who);
return 0;
}
Die resultierenden Ausbeuten Programm
This is Bob
Bob: Goodbye
This is Alice
Alice: Goodbye
I myobj_wrapper
für mehr Objekte definieren die who
Zeiger zu erhalten. Was ich bin unsicher, ob das Objekt von Interesse (std::string
im oben genannten) zerstört wird, bevor es in der who_is_this
Funktion ausgewertet wird. Es scheint nicht von oben, aber sollte ich das erwarten? Gibt es Fallen mit der obigen Lösung?
der Code Es sieht OK aus, obwohl ich zugeben muss, dass ich den Punkt der Übung nicht ganz verstehe. Ich verstehe das Problem nicht, das ist angeblich eine Lösung auf zu. –
Was meinst du mit ** rvalue destructor **? –
Ich meine das dynamisch zugewiesene Objekt an 'who_is_this (myobj_wrapper (" Alice "). Who);' –