Problème de std::move et héritage
J'essaye de comprendre comprendre comment le std::move fonctionne mais il y a quelques trucs qui m'échapent:
J'ai le code suivant:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
#include<iostream>
#include<string>
using namespace std;
class I
{
public:
virtual void Display() { throw "stop";}
};
class A: public I
{
string _s;
public:
A():_s("Hey kéké! "){}
virtual void Display() { cout << _s << "A is in da house" << endl;}
};
I&& f()
{
A a;
I&& i = std::move(a);
i.Display();
return std::move(i);
}
int main(int c, const char **argv)
{
I&& i = f();
i.Display();
return 0;
} |
Je compile ainsi:
>g++ -std=c++11 -o sortie essai.cpp
>./sortie
Hey kéké! A is in da house
A is in da house
Pourquoi dans la fonction f I.Display retourne "Hey kéké! A is in da house" alors que dans la fonction main j'ai: "A is in da house"?
Note:
Je me dis que le problème ne vient peut être pas du std::move mais que dans la fonction f, le return n'est pas bon.
J'ai réessayé de changé la fonction f ainsi:
Code:
1 2 3 4 5 6 7 8
|
I&& f()
{
A a;
//I&& i = std::move(a);
//i.Display();
return std::move(a);
} |
Et lorsque j’exécute le programme, le i.Display() de la fonction main continue de retourner: "A is in da house"