c++ - 从动态创建的数组构造 POD 对象时,是否建议使用 placement new?

标签 c++ placement-new

给定任何 POD 类型,是否推荐这样做:

any_pod* p = new any_pod[n];
for (std::size_t i = 0; i < n; ++i)
    new (&p[i].member) other_pod(whatever);

最佳答案

考虑到这个问题有点主观,不,我绝不会推荐这样的代码。不管它是否是未定义的行为,它仍然难以阅读并且需要任何 future 的维护者花费额外的时间(可能很长)来理解你在做什么。

如果您需要可变类型功能,请根据您的需要使用 boost::variantboost::any

如果您只想从一个类中获取数据并将其复制/分配给另一个类,这就是转换构造函数和转换赋值运算符的用途。

关于c++ - 从动态创建的数组构造 POD 对象时,是否建议使用 placement new?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8012601/

相关文章:

c++ - 使用 C+ +'s "placement new 的动态分配”

C++覆盖具有不同返回类型的虚函数

c++ - 如果有和没有花括号

c++ - 在初始化内存上使用 placement new 是否合法?

c++ - 我可以在 operator= 中使用 placement new(this) 吗?

c++ - placement new 在 C++ 中是如何工作的?

c++ - 使用 ifstream 从 C++ 文件中读取二进制无符号短整型

c++ - Windows 生物识别框架示例 umdf 驱动程序 : This device cannot start.(代码 10)

C++ - 排序算法看不到我为用户定义类型重载的 "<"运算符。

c++ - placement new 是如何运作的?