上下文是: 将包含类型 T 和 char * p 的容器写入内存区域。假设指针已经针对类型 T 进行了适当对齐——对齐问题不是问题的一部分。 我如何默认在该内存区域构造一个元素?
((*T)(p))->T();
适用于类,但不适用于某些内置类型。
((*T)(p)) = 0; // or simply memset
对于整数类型,指针。 这两个是否涵盖了一切, union 等等? 是否有最佳实践或一些标准库功能? std::allocator::construct 可以做到,例如std::vector 使用,但它不是静态方法,所以我需要它的一个实例。是否有一些独立或静态函数可以做到这一点?
--编辑--
是的,答案很明显,我今天很笨——placement new 顺便说一句,现在我正在尝试破坏元素......
最佳答案
“Placement new”是要查找的术语。它是一个标准库 operator new
重载,实际上并不分配内存,而只是返回您传递给它的任何指针。
关于c++ - 在没有分配器实例的情况下,是否有一种简单的方法在 C++ 中默认构造一个泛型类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33158896/