从C ++中的父对象构造子对象

问题描述 投票:1回答:1

我正在尝试从基类对象构造一个子类对象。我已经尝试了以下代码。

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
1个回答
0
投票

让我从此答案中复制粘贴:https://stackoverflow.com/a/15663912/512225

std :: move不会从对象移动。它只是返回一个右值引用,其引用对象是对象,从而可以从对象中移出。

无论如何您的代码都很糟糕。我希望你知道。如果您不这样做,请要求进行审查。

© www.soinside.com 2019 - 2024. All rights reserved.