这种理解正确吗:如果一个对象本身存储了所有内容,那么复制它和移动它实际上是同一件事?

问题描述 投票:0回答:1

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++ rust memory-management move-semantics
1个回答
0
投票

事实上,如果一个对象在内部保存其所有数据,而不引用外部数据,则复制和重新定位该对象本质上会产生相同的结果。发生这种情况是因为这两个操作都会复制对象中包含的所有信息。 在您提供的 C++ 代码中,复制和移动 EverythingInMyself 将产生相同的结果,因为所有数据都保存在对象本身内。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.