C++ でのモデル化
#include <cstddef>
#include <cstring>
class SelfReferentialBuffer {
std::byte data[1024];
std::byte* cursor = data;
public:
SelfReferentialBuffer(SelfReferentialBuffer&& other)
: cursor{data + (other.cursor - other.data)}
{
std::memcpy(data, other.data, 1024);
}
};
Compiler Explorer で確認する
SelfReferentialBuffer には 2 つのメンバーがあり、data は 1 キロバイトのメモリで、cursor はその前者を指すポインタです。
そのムーブコンストラクタは、cursor が新しいメモリアドレスに更新されることを保証します。
この型を Rust で簡単に表現することはできません。