我正在尝试从基类对象构造一个子类对象。我已经尝试了以下代码。
class A
{
public:
A();
A(A&& objectName) = default;
virtual void setint(int i);
virtual void getint();
int var;
};
class B: public A
{
public:
virtual void getint();
B(A&& objectName);
int j= 20;
};
A::A()
{
}
void A::setint(int i)
{
var = i;
}
void A::getint()
{
qDebug()<<"From A Var"<<var;
}
void B::getint()
{
qDebug()<<"From B j"<<j;
qDebug()<<"From B Var"<<var;
}
B::B(A&& objectName): A(std::move(objectName))
{
}
并且在我的Main.cpp中,我正在这样做
#include <memory>
int main(int argc, char *argv[])
{
A *obj = new A();
obj->setint(10);
obj->getint();
A *obj1 = new B(std::move(*obj));
obj->getint();
obj1->getint();
return 0;
}
The result I get is
From A Var 10
From A Var 10
From B j 20
From B Var 10
我的问题是,为什么我在A * obj1 = new B(std :: move(* obj))之后得到Var的值?这条线。我认为obj指向的对象一定已经被破坏。
让我从此答案中复制粘贴:https://stackoverflow.com/a/15663912/512225
std :: move不会从对象移动。它只是返回一个右值引用,其引用对象是对象,从而可以从对象中移出。
无论如何您的代码都很糟糕。我希望你知道。如果您不这样做,请要求进行审查。