我可以使用某种类型的动态数组的空间来构造其他类型的对象吗



我可以使用位置为new的动态整数数组的内存吗?

int* p = new int[10]{};
std::string* pstr = new(p)std::string("Hi there");
std::cout << *pstr << std::endl;
pstr->~std::string();
delete[] p;

代码运行良好,但这样做安全吗?非常感谢。

不,正如所写的那样,这是不安全的,因为您不确定sizeof (std::string)是<=10 * sizeof (int)

如果你添加代码来检查它,那么它是安全的(r(,比如:

size_t bytes_needed = sizeof (std::string);
size_t ints_needed = (bytes_needed + sizeof (int) - 1) / sizeof (int);
int *p = new int [ints_needed];
...

然而,也可能存在对齐问题,因此使用aligned_alloc(和free(而不是new [](和delete [](是更好的选择

最新更新