c ++移动语义是否在每种情况下都节省了资源?

哈立德·加伯

我知道C ++移动语义应该节省处理器能力和内存,因为

Move::Move(Shallow&& source) noexcept      // Move constructor
{
    data = source.data;       // Assume data is an array of size = size and all initiated to a user specific value
    size = source.size;
    source.size =0;
    source.data ={nullptr};
}

假设所有数组索引都初始化为一个特定的变量,那么move语义将只将数组指针保存在内存中,并使源数组为空,就像上面的示例一样,这将防止动态创建新数组。使用复制构造函数(具体来说,是深度复制构造函数),但是

1)如果我们假设数据只是一个简单的整数甚至是一个非常大的未初始化数组,那么使用move构造函数有什么好处?2)这种move构造函数似乎与只调用带有浅拷贝的copy构造函数几乎一样

Copy::Copy(const &source){        // A shallow copy
        data = source.data;       // Assume data is an array of size = size
        size = source.size;
}

当然唯一的区别是Nulling data和move结构中的大小,因此在内存和性能方面,上述两个代码段之间都没有任何性能改进,因为Nulling数据指针和大小实际上并没有节省我们的空间或内存是的,否则我想念这里的东西。

这个问题使我可以知道何时使用浅表复制或Move语义,以及它们之间是否有任何区别(以移动方式使属性无效)除外。

带翅膀的小行星

如果我们假设数据只是一个简单的整数,甚至是一个非常大的未初始化的数组,那么使用move构造函数会有什么好处?

没有。

这个move构造函数看起来几乎像只是通过浅拷贝调用copy构造函数一样。

它是。

“移动”仅用于转移资源的所有权,并且只有在资源是间接持有(例如通过指针)的情况下,您才可以这样做。然后,您可以交换指针。但是,如果您必须交换实际数据,则基本上只是一个副本。

大多数标准容器(例如std::vector和除外std::array)都在指针后面间接保存其数据,因此它们具有有用的移动语义。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

每种情况下均使用“自动”输入C3539-为什么?

来自分类Dev

我的代码不会显示每种情况下要使用的提示,C ++!

来自分类Dev

C++ | 如何在不每次都返回值的情况下循环 if 语句

来自分类Dev

C#如何在没有bool的情况下最终进行尝试捕获以释放资源?

来自分类Dev

C#如何在没有bool的情况下最终进行尝试捕获以释放资源?

来自分类Dev

如何在不设置完整路径的情况下访问 C++ 中的资源

来自分类Dev

以下两种Java for循环代码是否在每种情况下都产生相同的结果?

来自分类Dev

如何在不违反C ++中的DRY原理的情况下实现可移动重载?

来自分类Dev

是否可以在没有repr(C)的情况下将结构传递给C API?

来自分类Dev

在没有C11线程的情况下,C标准库函数是否是线程安全的?

来自分类Dev

C ++ 11移动语义

来自分类Dev

C ++移动语义说明

来自分类Dev

C ++移动语义说明

来自分类Dev

在这种情况下正确使用移动语义?

来自分类Dev

在这种情况下正确使用移动语义?

来自分类Dev

C ++是否具有移动和删除语义?

来自分类Dev

是否可以创建vb.net或C#应用程序,以在没有任何移动应用程序的情况下使用蓝牙将通知发送到移动设备?

来自分类Dev

在新的c ++ 11项目中,默认情况下是否应该删除任何操作?

来自分类Dev

默认情况下,Objective-C中的对象是否初始化为nil?

来自分类Dev

是否可以在不污染名称空间的情况下声明extern“ C”函数?

来自分类Dev

在不检查C#扩展名的情况下检测文件是否为CSV

来自分类Dev

是否可以在没有Swift或Objective-C的情况下使用Go创建iOS应用?

来自分类Dev

是否可以在不使用任何头文件的情况下用C ++执行I / O操作?

来自分类Dev

在这种情况下,c ++标准是否保证模板实例化?

来自分类Dev

是否可以在不泄漏我的文件的情况下将密码保存在c ++文件中

来自分类Dev

是否可以在不使用QML的情况下用C ++开发ubuntu touch应用程序?

来自分类Dev

C ++:是否有可能在没有返回的情况下终止非无效函数?

来自分类Dev

是否可以在运行时确定对象选择的情况下使用C ++对象组成?

来自分类Dev

是否可以在不使用任何头文件的情况下用C ++执行I / O操作?

Related 相关文章

  1. 1

    每种情况下均使用“自动”输入C3539-为什么?

  2. 2

    我的代码不会显示每种情况下要使用的提示,C ++!

  3. 3

    C++ | 如何在不每次都返回值的情况下循环 if 语句

  4. 4

    C#如何在没有bool的情况下最终进行尝试捕获以释放资源?

  5. 5

    C#如何在没有bool的情况下最终进行尝试捕获以释放资源?

  6. 6

    如何在不设置完整路径的情况下访问 C++ 中的资源

  7. 7

    以下两种Java for循环代码是否在每种情况下都产生相同的结果?

  8. 8

    如何在不违反C ++中的DRY原理的情况下实现可移动重载?

  9. 9

    是否可以在没有repr(C)的情况下将结构传递给C API?

  10. 10

    在没有C11线程的情况下,C标准库函数是否是线程安全的?

  11. 11

    C ++ 11移动语义

  12. 12

    C ++移动语义说明

  13. 13

    C ++移动语义说明

  14. 14

    在这种情况下正确使用移动语义?

  15. 15

    在这种情况下正确使用移动语义?

  16. 16

    C ++是否具有移动和删除语义?

  17. 17

    是否可以创建vb.net或C#应用程序,以在没有任何移动应用程序的情况下使用蓝牙将通知发送到移动设备?

  18. 18

    在新的c ++ 11项目中,默认情况下是否应该删除任何操作?

  19. 19

    默认情况下,Objective-C中的对象是否初始化为nil?

  20. 20

    是否可以在不污染名称空间的情况下声明extern“ C”函数?

  21. 21

    在不检查C#扩展名的情况下检测文件是否为CSV

  22. 22

    是否可以在没有Swift或Objective-C的情况下使用Go创建iOS应用?

  23. 23

    是否可以在不使用任何头文件的情况下用C ++执行I / O操作?

  24. 24

    在这种情况下,c ++标准是否保证模板实例化?

  25. 25

    是否可以在不泄漏我的文件的情况下将密码保存在c ++文件中

  26. 26

    是否可以在不使用QML的情况下用C ++开发ubuntu touch应用程序?

  27. 27

    C ++:是否有可能在没有返回的情况下终止非无效函数?

  28. 28

    是否可以在运行时确定对象选择的情况下使用C ++对象组成?

  29. 29

    是否可以在不使用任何头文件的情况下用C ++执行I / O操作?

热门标签

归档