给定任何 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::variant
或 boost::any
。
如果您只想从一个类中获取数据并将其复制/分配给另一个类,这就是转换构造函数和转换赋值运算符的用途。
关于c++ - 从动态创建的数组构造 POD 对象时,是否建议使用 placement new?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8012601/