【发布时间】:2020-03-06 09:31:19
【问题描述】:
我正在尝试从基类对象构造子类对象。我试过下面的代码。
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指向的对象一定已经被破坏了。
【问题讨论】:
-
请改进代码示例的格式。
标签: rvalue-reference move-constructor