Построение дочернего объекта из родительского объекта в C ++ - PullRequest
1 голос
/ 06 марта 2020

Я пытаюсь создать объект дочернего класса из объекта базового класса. Я попробовал приведенный ниже код.

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 

Мой вопрос, почему я получаю значение Var после A * obj1 = новый B (std :: move (* obj)); эта линия. Я думал, что объект, указанный obj, должен быть уничтожен.

1 Ответ

0 голосов
/ 06 марта 2020

Позвольте мне скопировать вставку из этого ответа: { ссылка }

std :: move не перемещается от объекта. Он просто возвращает ссылку на rvalue, ссылка на которую является объектом, позволяя отойти от объекта.

В любом случае ваш код ужасен. Я надеюсь ты знаешь. Если вы этого не сделаете, попросите обзор.

...