如果有一个平凡类型的有效对象(在这种情况下,平凡类型满足平凡移动/复制可构造概念(,并且memcpy
将其分配到未初始化的内存区域,则复制的内存区域是有效对象吗?
根据我所读到的假设:一个对象只有在它的构造函数被调用时才有效。
将具有std::memcpy
的平凡类型的对象复制到大小合适且对齐的存储中,将在该位置隐式地开始新对象的生存期。
有一类类型称为隐式生存期类型,其要求是:
- 标量类型,或
- 数组类型,或
- 聚合类类型,或
- 一个类类型,该类至少有一个平凡的合格构造函数
- ,并且
- 一个琐碎的、未删除的析构函数,
- 或上述类型之一的cv合格版本
琐碎的类类型满足这些要求。
隐式生存期类型的对象具有这样的特性,即它们的生存期可以通过几个函数或操作隐式启动:
开始类型为char
、unsigned char
或std::byte
的数组的生存期的
- 操作(由于C++17(,在这种情况下,在数组中创建这样的对象
- 调用以下分配函数,在这种情况下,这些对象
- 在分配的存储中创建:
- 操作员新
- 操作员新[]
- std::malloc
- std::calloc
- std::realloc
- std::aligned_alloc(从C++17开始(
- 调用以下对象表示复制函数,在这种情况下,这些对象是在存储或结果的目标区域中创建的:
- 标准::memcpy
- std::memmove
- std::bit_cast(从C++20开始(