C++ 中“本身存储或不存储所有内容的对象”示例:
using EverythingInMyself1 = int[64];
using EverythingInMyself2 = struct {
bool flag;
int head;
uint8_t data[100];
};
using SomeDataMayNotInMyself1 = std::string;
using SomeDataMayNotInMyself2 = struct {
bool flag;
std::unique_ptr<uint8_t[]> data;
};
Rust 中的“对象本身存储或不存储所有内容”的示例:
type EverythingInMyself1 = [i32; 64];
struct EverythingInMyself2 { flag:bool, head:i32, data:[u8; 100] }
type SomeDataMayNotInMyself1 = String;
struct SomeDataMayNotInMyself2 { flag:bool, data:Vec<u8> }
对于所有基于堆栈和堆的内存分配语言都是如此吗?因为据我所知,移动实际上是浅复制。如果一个对象本身存储了所有内容,那么深拷贝和浅拷贝是一样的。
事实上,如果一个对象在内部保存其所有数据,而不引用外部数据,则复制和重新定位该对象本质上会产生相同的结果。发生这种情况是因为这两个操作都会复制对象中包含的所有信息。 在您提供的 C++ 代码中,复制和移动 EverythingInMyself 将产生相同的结果,因为所有数据都保存在对象本身内。