🌶️动态内存管理类
2022-6-1
| 2023-8-2
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
Property
 
 
一些类需要分配可变大小的内存,这种类最好是用标准库容器来保存数据。然而,这种策略并不适合于所有类,有些类需要自己分配数据。这些类通常定义自己的拷贝控制成员来管理内存分配。
当调用reallocate时,并不需要将就数据中的字符串拷贝到新的数据中,原因是旧数据马上就要被丢弃了,此时应该移动而不是拷贝这个数据,这样就避免了给字符串重新分配内存。
 
移动构造函数和std::move
通过移动构造函数可以将给定对象的资源移动到将要被构建的对象中去。移动构造函数将保证被移动的对象,其内部状态是可以被有效的析构的。如:指针变为空指针。
同时标准库中定义了一个新函数 std::move 在 utility 头文件中。使用move函数有两点需要注意:
  1. 如果希望调用移动构造函数需要调用 std::move 来告诉编译器使用移动构造函数,否则,将会使用拷贝构造函数。
  1. 调用move必须加上作用域限定符,显式告诉编译器我们调用的是哪个版本的函数:
    调用 move 将返回一个结果,这个结果将导致 construct 函数使用 string 的移动构造函数。由于使用了移动构造函数,由这些 string 管理的内存将不会被拷贝。相反,新构建的 string 将获取旧 string 的所有权。在移动元素之后,就可以将旧的元素给 free 掉了,移动构造函数将保证可以安全的将 string 析构掉或者被赋予新的值。
     
  2. C++
  3. 类的交换操作对象移动
    目录