u010984956 2016-05-06 08:51 采纳率: 0%
浏览 2839

c++新手:关于std::move()移动对象与动态内存的问题

c++primer(第5版)中的一段程序:(P561)

class Quote {
public:
    virtual Quote* clone() && {
        return new Quote(std::move(*this));
    }
};

书上解释说该右值引用函数将自身移动到新数据中。

疑问:
变量应该保存在栈内存中,而new动态分配的内存应当保存在堆内存中。这样的话,使用std::move()右值引用来将变量“移动”到动态内存中应当没有意义。

 #include <memory>
#include <iostream>
using std::cout;
using std::endl;
using std::shared_ptr;

 int main()
{
    int ax = 0, bx = 0;
    cout << &ax << " " << &bx << endl;//#1 007EFE74 007EFE68
    shared_ptr<int> x(new int(ax));
    shared_ptr<int> y(new int(std::move(bx)));
    cout << x.get() <<" "<< y.get()<<endl;//#2 0092FDB8 0092FF98
    return 0;
}

我写了一段代码验证也确实如此:
两个cout表明两个变量确实被重新拷贝到了堆内存中

请问动态内存是否是 只能拷贝不能移动,或者是我理解错了?

  • 写回答

1条回答 默认 最新

  • oyljerry 2016-05-09 12:01
    关注

    移动主要发生在临时对象复制到新对象的时候就不需要copy。而是直接数据移动。所以主要是右值对象发生move

    评论

报告相同问题?

悬赏问题

  • ¥15 用PLC设计纸袋糊底机送料系统
  • ¥15 simulink仿真中dtc控制永磁同步电机如何控制开关频率
  • ¥15 用C语言输入方程怎么
  • ¥15 网站显示不安全连接问题
  • ¥15 github训练的模型参数无法下载
  • ¥15 51单片机显示器问题
  • ¥20 关于#qt#的问题:Qt代码的移植问题
  • ¥50 求图像处理的matlab方案
  • ¥50 winform中使用edge的Kiosk模式
  • ¥15 关于#python#的问题:功能监听网页