【问题标题】:Constructing a child object from parent object in C++在 C++ 中从父对象构造子对象
【发布时间】: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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    • 2017-02-22
    • 2018-06-24
    • 2019-09-12
    • 2010-10-25
    • 2017-07-14
    相关资源
    最近更新 更多